gpt4 book ai didi

c# - 枚举描述到字符串

转载 作者:太空狗 更新时间:2023-10-29 19:47:01 24 4
gpt4 key购买 nike

我有以下枚举:

[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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com