【发布时间】:2014-02-19 14:28:37
【问题描述】:
我有以下 ENUM:
[Flags]
public enum DataFiat {
[Description("Público")]
Public = 1,
[Description("Filiado")]
Listed = 2,
[Description("Cliente")]
Client = 4
} // DataFiat
我创建了一个扩展来获取枚举属性:
public static T GetAttribute<T>(this Enum value) where T : Attribute {
T attribute;
MemberInfo info = value.GetType().GetMember(value.ToString()).FirstOrDefault();
if (info != null) {
attribute = (T)info.GetCustomAttributes(typeof(T), false).FirstOrDefault();
return attribute;
}
return null;
}
这适用于非标志枚举...但是当我有时:
var x = DataFiat.Public | DataFiat.Listed;
var y = x.GetAttribute<Description>();
y 的值为 null ...
我想获得“Público, Filiado, Cliente”...就像 ToString() 一样。
如何更改我的扩展程序以使其正常工作?
谢谢
【问题讨论】:
-
Break the flags down into the individual values,获取每个单独值的属性并建立一个字符串。
-
但它在这里不起作用,因为您的扩展方法只返回 1 个值,但是您想要做的是返回一个值列表。否则扩展方法需要知道如何组合这些属性
-
如果您希望说英语的人使用它,它不会很好地本地化。