有什麼辦法可以反射測試如果一個枚舉是[Flags] enum
或者它是一個常規的enum
?如何區分標誌枚舉和普通枚舉之間的區別?
如果枚舉是Flags枚舉,而不是Flags枚舉,則需要應用程序的行爲稍有不同。
有什麼辦法可以反射測試如果一個枚舉是[Flags] enum
或者它是一個常規的enum
?如何區分標誌枚舉和普通枚舉之間的區別?
如果枚舉是Flags枚舉,而不是Flags枚舉,則需要應用程序的行爲稍有不同。
您可以通過反射測試屬性是否存在:
System.Attribute[] attrs = System.Attribute.GetCustomAttributes(t);
var isFlags = attrs.Any(attr => attr is FlagsAttribute);
或者:
var isFlags = typeof(MyEnum).GetCustomAttributes<FlagsAttribute>().Any();
參見:http://msdn.microsoft.com/en-us/library/z919e8tw(v=vs.80).aspx
[OP編輯:]
這個工作,但語法稍微有點w榮。這是正確的:
var isFlags = myEnum.GetType()
.GetCustomAttributes(typeof(FlagsAttribute), false).Any();
您可以通過反射得到枚舉的屬性,看看如果使用的FlagsAttribute。