3

このような状況で、強く型付けされた方法 (ラムダ?) を使用してフィールド名を指定することは可能ですか?

public class Demo : IValidatableObject
{
    public string DemoField {get; set;}

    IEnumerable<ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
    {
        if (<...>)
        {
            yield return new ValidationResult("Some validation message", new string[] { "DemoField" }); // <-- Here
        }
    }

}

たとえば、フィールド名が文字列で指定されている場合は、リファクタリングできません。

4

2 に答える 2

4

「組み込み」の方法は知りません。ただし、LINQ 式を使用して次のようなことを行うことができます。

Expression<Func<Demo, string>> lambda = (Demo d) => d.DemoField;
string demoFieldName = ((System.Linq.Expressions.MemberExpression)lambda.Body).Member.Name;
yield return new ValidationResult("Some validation message", new string[] { demoFieldName });

この方法では、ハードコードされた文字列がなく、リファクタリングが機能します。

于 2012-12-06T20:50:16.577 に答える