C#按属性获取字段值(PropertyInfo)

时间:2016-08-17 09:09:47

标签: c# attributes

我有以下类属性:

[EffectAspect(Enums.Effects.Low)]
public int Wind { set; get; }

[EffectAspect(Enums.Effects.Low)]
public int Fire { set; get; }

[EffectAspect(Enums.Effects.Medium)]
public int Water  { get; set; }

[EffectAspect(Enums.Effects.Huge)]
public int Earth  { get; set; }`

现在,让我们说我想计算总低点,中等和低点。 所以我写了类似的东西:

List<Enums.Effects> result = new List<Enums.Effects>();

PropertyInfo[] properties = GetType().GetProperties();
foreach (PropertyInfo p in properties)
{
    object[] attrs = p.GetCustomAttributes(true);
    foreach (Object attr in attrs)
    {
        var effectAttr = attr as EffectAspect;
        if (effectAttr != null)
        {
            int amount = (int)p.GetConstantValue();
            for (int i = 0; i < amount; i++)
            {
                result.Add(effectAttr.Aspect);
            }
        }
    }
}
return result;            

例如:如果Wind = 3Enums.Effects.Low列表中至少会有3个result

[AttributeUsage(AttributeTargets.Property)]
public sealed class EffectAspectAttribute : Attribute
{
    public Enums.EffectsAspect { get; private set; }

    public EffectAspectAttribute (Enums.EffectsAspect aspect)
    {
        this.Aspect = aspect;
    }
}

问题是:int amount = (int)p.GetConstantValue();抛出异常说:

  

未找到字面值。

我无法找到它的含义。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用

p.GetConstantValue();

而不是

{{1}}

您可以参考此链接主题:Difference between GetValue, GetConstantValue and GetRawConstantValue