获得自己的属性/反思?

时间:2013-09-27 07:35:32

标签: c#

我搜索了一种在属性中获取自己的属性的方法。

让我演示一下我正在搜索的内容

我想使用float / double值的属性来给出比较的容差。

e.g。

[FieldAttribute(CompareTolerance = 0.001)]
public float SomeProperty
{
    get { return this.someProperty; }
    set
    {
        if (Math.Abs(someProperty- value) > 0.001) // here i would like to use somthing like '> FieldAttribute.CompareTolerance'
        this.someProperty = value;
    }
}

从另一个班级我会用

PropertyInfo propertyInfo = someobject.GetType().GetProperty("SomeProperty");
if (null != propertyInfo)
{
    Attribute attribute = Attribute.GetCustomAttribute(propertyInfo, typeof (FieldAttribute));
    FieldAttribute fieldAttribute = attribue as FieldAttribute;
    return fieldAttribute.CompareTolerance;
}


...

所以最后我只需要

if(Math.Abs(someProperty - value) < someobject.CompareTolerance("SomeField")) ... values are equal

但是有没有办法在属性中获取属性而不必每次都使用反射(this.CompareTolerance(“SomeField”))

1 个答案:

答案 0 :(得分:1)

除了代码生成之外,没有别的方法可以解决这个问题。 在使用属性反射提取值后,您可以考虑使用所需的getter / setter(可能需要放置在部分方法中)代码生成T4 template类的partial定义。然后再次编译。

我不确定为什么每个人似乎都在避免最近生成代码。 T4让现代版本的VS感到高兴。