获取自己的属性/反射

本文关键字:反射 属性 自己的 获取 | 更新日期: 2023-09-27 18:33:10

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

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

我想使用浮点/双精度值的属性来容许比较。

例如

[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

但是有没有办法在每次都不使用反射的情况下在属性中获得贡品(这个。CompareTolerance("SomeField"( (

获取自己的属性/反射

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

我不确定为什么最近每个人似乎都在避免生成代码。T4 使这在现代版本的 VS 中成为一种乐趣。