如何检查enum
是否标记为过时?
public enum MyEnums
{
MyEnum1,
[Obsolete("How can you know that I'm obsolete?")]
MyEnum2,
MyEnum3
}
Run Code Online (Sandbox Code Playgroud)
现在在运行时,我需要知道哪些是过时的:
foreach (var myEnum in Enum.GetValues(typeof(MyEnums)).Cast<MyEnums>())
{
// How can I check if myEnum is obsolete?
}
Run Code Online (Sandbox Code Playgroud)
M4N*_*M4N 14
以下方法检查枚举值是否具有以下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);
}
Run Code Online (Sandbox Code Playgroud)
你可以像这样使用它:
var isObsolete2 = IsObsolete(MyEnums.MyEnum2); // returns true
var isObsolete3 = IsObsolete(MyEnums.MyEnum3); // returns false
Run Code Online (Sandbox Code Playgroud)
这是一个非常干净的扩展方法。诀窍是您正在使用枚举名称反映枚举类型之外的字段。
public static bool IsObsolete(this Enum value)
{
var enumType = value.GetType();
var enumName = enumType.GetEnumName(value);
var fieldInfo = enumType.GetField(enumName);
return Attribute.IsDefined(fieldInfo, typeof(ObsoleteAttribute));
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2163 次 |
最近记录: |