C#从属性中检索字段名称

时间:2016-08-05 14:50:54

标签: c# .net reflection binding

我面临验证属性的问题,该属性的验证属性与相应的字段名称相关联。

int _myIntField;
public int MyIntField {
    get { return _myIntField; }
    set { _myIntField = value; }
}

现在,在验证Binding对象时,我可以访问BindingField,它返回属性名称MyIntField,而不是字段名称_myIntField

是否有可能以某种方式检索属性的_myIntField?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:0)

实际上,对于我的情况,我有一个解决办法:我创建了一个自定义属性,将相关的字段名称作为参数...

int _myIntField;
[MyAttribue("_myIntField")] 
public int MyIntField {
    get { return _myIntField; }
    set { _myIntField = value; }
}

为了完整起见,这是属性的声明:

public class MyAttribue : ValidationAttribute {
    protected readonly string _fieldName;

    public MyAttribue(string fldName) {
      _fieldName = fldName;
    }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext) {
      if (validationContext == null) {
        return ValidationResult.Success;
      }
      ErrorMessage = string.Empty;

      if (validationContext.ObjectInstance != null) {
        // do whathever validation is required using _fieldName...
      }
      //
      if (!string.IsNullOrWhiteSpace(ErrorMessage)) {
        return new ValidationResult(ErrorMessage);
      }
      return ValidationResult.Success;
    }
  }