如何创建一个非过时的Enum值列表



我有一个包含过时值的enum。我想返回一个未过时的枚举值列表。我可以返回所有枚举值的列表,但我不能识别过时的值以将它们从列表中排除。

下面是一些示例代码来说明这个问题。首先,这里是一个示例枚举,第二个值被标记为obsolete:
public enum MyEnum
{
Item1 = 1,
[Obsolete]
Item2 = 2,
Item3 = 3
}

下面是一个示例扩展方法,它将枚举的所有值作为列表返回:

public static class MyEnumExt
{
/// <summary>
/// I want to amend this method to return a list only including the 
/// enum values that are not obsolete
/// </summary>
public static List<MyEnum> GetList(this MyEnum t)
{
return Enum.GetValues(t.GetType()).Cast<MyEnum>().ToList();
}
}

有没有人对修改我的扩展方法有任何建议,只返回未标记过时的值?

你可以这样修改:

public static List<MyEnum> GetList()
{
Type type = typeof(MyEnum);
return Enum.GetValues(type)
.Cast<MyEnum>()
.Where(t => type.GetField(t.ToString()).GetCustomAttribute<ObsoleteAttribute>() == null)
.ToList();

}

基本上你需要得到对应于枚举值的字段,然后检查它没有被ObsoleteAttribute装饰。

注意GetCustomAttribute<T>是一个扩展方法,所以你需要using System.Reflection;

上网试试

最新更新