Anche io invecchio, uffa :-P
la chiaccherata con Marco de Sanctis era volta a capire perchè non avessi usato una sintassi di questo genere:
Ensure.That( () => args )
    .WithMessage( "Missing console arguments." )
    .IsFalse( v => v.Length == 0 );
che utilizzando le lambda mi permetteva di pigliare due piccioni con una fava:
  • rimuovere il nome del parametro che è una stringa non refactoring-friendly;
  • e passare contestualmente il valore da ispezionare;
In effetti quella cosa in origine c’era:
internal Ensure( System.Linq.Expressions.Expression<Func> obj )
{
    if( obj == null )
    {
        throw new ArgumentNullException( "obj", "Cannot use a null Expression> as Ensure ctor parameter." );
    }

    Func func = 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;
}
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.
Il suggerimento resta comunque valido per soddisfare il primo punto e poter scrivere questo:
Ensure.That( args )
    .Named( () => args )
    .WithMessage( "Missing console arguments." )
    .IsFalse( v => v.Length == 0 );
.m