我正在寻找一种通过提供显示名称来查找枚举字段的方法。为了查找显示名称,我写了这个剪辑,它返回了适当的字段(如果可用)作为任意类型。
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上。我做错了什么?
答案 0 :(得分:1)
考虑您的首选用途
MyEnum instance = MyEnum.GetFieldByDisplayName("my friendly name");
您正在尝试在枚举类型上定义静态方法,而不是扩展方法。扩展方法出现在 类型的实例上,而不是类型本身。
如果您定义了扩展类型,则可以像
一样使用它MyEnum instance = MyEnum.SomeValue.GetFieldByDisplayName("my friendly name");
AFAIK您无法定义允许您根据自己的喜好使用它的方法(或其他方法),因为您无法在枚举类型上定义静态方法。
答案 1 :(得分:0)
检查一下 - Enumeration extension methods
要启用扩展方法,重要的是如何编写方法的原型,而不是方法体。
所以,你应该有这样的东西:
public static void Something(this Enum e)
{
// code here
}