在这种情况下,是否可以使用强类型方式(lambda?)指定字段名称:
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
}
}
}
如果在字符串中指定字段名称,则无法重构,例如。
答案 0 :(得分: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 });
这样你就没有硬编码的字符串了,重构就行了。
答案 1 :(得分:1)
阅读关于此问题的答案here:
https://stackoverflow.com/a/15396656/643761
您可以这样使用它:
yield return new ValidationResult("Some Error.", GetFieldNames(() => new object[] { this.DemoField }));