2012-12-06 91 views
3

是否有可能在這種情況下使用一些強類型的方式(拉姆達?)指定的字段名稱:是否可以在IValidatableObject方法中以強類型方式指定字段名?

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

我不知道任何「內置」方式。但是你可以使用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 }); 

這種方式,你有沒有硬編碼字符串,將重構工作。

+0

謝謝,這似乎也可以包裝成方法\擴展... – artvolk

相關問題