作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有以下枚举:
[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() 工作一样。
如何更改我的扩展程序以使其正常工作?
谢谢
最佳答案
您可以使用 this :
var values = x.ToString()
.Split(new[] { ", " }, StringSplitOptions.None)
.Select(v => (DataFiat)Enum.Parse(typeof(DataFiat), v));
获取单个值。然后获取它们的属性值。
像这样:
var y2 = values.GetAttributes<DescriptionAttribute, DataFiat>();
public static T[] GetAttributes<T, T2>(this IEnumerable<T2> values) where T : Attribute
{
List<T> ts =new List<T>();
foreach (T2 value in values)
{
T attribute;
MemberInfo info = value.GetType().GetMember(value.ToString()).FirstOrDefault();
if (info != null)
{
attribute = (T)info.GetCustomAttributes(typeof(T), false).FirstOrDefault();
ts.Add(attribute);
}
}
return ts.ToArray();
}
关于c# - 枚举描述到字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21883458/
我是一名优秀的程序员,十分优秀!