…dimenticavo :-)
la chiaccherata con Marco de Sanctis era volta a capire perchè non avessi usato una sintassi di questo genere:
che utilizzando le lambda mi permetteva di pigliare due piccioni con una fava:Ensure.That( () => args ) .WithMessage( "Missing console arguments." ) .IsFalse( v => v.Length == 0 );
- rimuovere il nome del parametro che è una stringa non refactoring-friendly;
- e passare contestualmente il valore da ispezionare;
Decisamente figoso, peccato che quella chiamata a Compile(), per poi poter ottenere il valore, abbia un costo notevole che inficia in maniera percettibile sulle prestazioni complessive.internal Ensure( System.Linq.Expressions.Expression<Func> obj ) { if( obj == null ) { throw new ArgumentNullException( "obj", "Cannot use a null Expression > as Ensure ctor parameter." ); } Funcfunc = obj.Compile(); this.inspectedObject = func(); var expression = obj.Body as System.Linq.Expressions.MemberExpression; var member = expression.Member as System.Reflection.FieldInfo; this.Name = member.Name; }
Il suggerimento resta comunque valido per soddisfare il primo punto e poter scrivere questo:
.mEnsure.That( args ) .Named( () => args ) .WithMessage( "Missing console arguments." ) .IsFalse( v => v.Length == 0 );