0

我正在寻找一种通过提供显示名称来查找枚举字段的方法。为了查找显示名称,我编写了这个片段,它将适当的字段(如果可用)作为任意类型返回给我。

if (!type.IsEnum) throw new ArgumentException("type");
        return (from field in type.GetFields(BindingFlags.Public | BindingFlags.Static)
                    where field.IsDefined(typeof(DisplayNameAttribute))
                let attribute = field.GetCustomAttribute(typeof(DisplayNameAttribute)) as DisplayNameAttribute
                    where attribute != null && attribute.DisplayName.Equals(lookup, StringComparison.InvariantCultureIgnoreCase)
                select (T)field.GetValue(null)).FirstOrDefault();

现在,我想这样称呼它:

MyEnum instance = MyEnum.GetFieldByDisplayName("my friendly name");

我尝试创建一个将“ this Type”和“ this Enum”作为参数的扩展方法,但它从未出现在 MyEnum 上。我究竟做错了什么?

4

2 回答 2

1

考虑您的首选用途

MyEnum instance = MyEnum.GetFieldByDisplayName("my friendly name");

您正在尝试在枚举类型上定义静态方法,而不是扩展方法。扩展方法出现在类型的实例上,而不是类型本身上。

如果你定义了一个扩展类型,你可以像这样使用它

MyEnum instance = MyEnum.SomeValue.GetFieldByDisplayName("my friendly name");

AFAIK 您无法定义允许您随意使用它的方法(或其他方法),因为您无法在枚举类型上定义静态方法。

于 2013-07-17T11:09:02.523 回答
0

看看这个 -枚举扩展方法

要显示扩展方法,重要的是如何编写方法的原型,而不是方法体。

所以,你应该有这样的东西:

public static void Something(this Enum e)
{
    // code here
}
于 2013-07-17T11:02:27.457 回答