如果标记为过时,如何检查enum
?
public enum MyEnums
{
MyEnum1,
[Obsolete("How can you know that I'm obsolete?")]
MyEnum2,
MyEnum3
}
现在在运行时,我需要知道哪些已过时:
foreach (var myEnum in Enum.GetValues(typeof(MyEnums)).Cast<MyEnums>())
{
// How can I check if myEnum is obsolete?
}
最佳答案
以下方法检查枚举值是否具有Obsolete
属性:
public static bool IsObsolete(Enum value)
{
var fi = value.GetType().GetField(value.ToString());
var attributes = (ObsoleteAttribute[])
fi.GetCustomAttributes(typeof(ObsoleteAttribute), false);
return (attributes != null && attributes.Length > 0);
}
您可以像这样使用它:
var isObsolete2 = IsObsolete(MyEnums.MyEnum2); // returns true
var isObsolete3 = IsObsolete(MyEnums.MyEnum3); // returns false
关于c# - 检查枚举是否过时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29832536/