0

我似乎无法使用以下代码读取自定义枚举属性:

public class CustomAttribute : Attribute
{
    public CultureAttribute (string value)
{
    Value = value;
}

public string Value { get; private set; }
}

public enum EnumType
{
    [Custom("value1")]
    Value1,
    [Custom("value2")]
    Value2,
    [Custom("value3")]
    Value3
}
...
var memInfo = typeof(CustomAttribute).GetMember(EnumType.Value1.ToString());
// memInfo is always empty
var attributes = memInfo[0].GetCustomAttributes(typeof(CustomAttribute), false);

不确定我是否只是在这里遗漏了一些明显的东西,或者在 Mono/MonoMac 中读取自定义属性是否存在问题。

4

1 回答 1

1

您当然应该GetMember()在具有给定成员的类型上调用 :) 在这种情况下EnumType不是CustomAttribute。还修复了我认为属性构造函数的复制粘贴错误。

完整的工作测试代码(你应该知道我们更喜欢这些,而不是我们必须自己完成的半成品程序;)):

using System;

public class CustomAttribute : Attribute
{
    public CustomAttribute (string value)
    {
        Value = value;
    }

    public string Value { get; private set; }
}

public enum EnumType
{
    [Custom("value1")]
    Value1,
    [Custom("value2")]
    Value2,
    [Custom("value3")]
    Value3
}

class MainClass
{
    static void Main(string[] args)
    {
        var memInfo = typeof(EnumType).GetMember(EnumType.Value1.ToString());
        Console.WriteLine("memInfo length is {0}", memInfo.Length);
        var attributes = memInfo[0].GetCustomAttributes(typeof(CustomAttribute), false);
        Console.WriteLine("attributes length is {0}", attributes.Length);
    }
}

操作

于 2013-06-05T00:45:20.097 回答