测试一个对象是否为枚举类型

101
我想知道'theObject'是否是枚举类型(任何枚举类型)。
 foreach (var item in Enum.GetValues(theObject.GetType())) {

     //do something
 }
4个回答

230
问题就是答案。 :)
bool isEnum = theObject is Enum;

15
太棒了!更贴近问题的表述:如果(theObject是枚举类型){...}。 - Peter Lillevold
6
这甚至不是我来这里的目的,但我还是要给你一个点赞。它太...干净了...<嗅嗅>,太美了,哭泣。 - Lukas
13
/测试/ 如果(anObject 是 /一个/ 枚举){} - Tom Fobear
1
bool isEnum = theObject.GetType().IsEnum; 更好,is Enum 并不总是返回 true。 - chris hu
1
@chrishu,您能具体说明在哪些情况下这个答案不适用吗?否则这条评论并没有帮助。 - Noman_1

76

如果您有一个Type,请使用Type.IsEnum属性,例如:

bool isEnum = theObject.GetType().IsEnum;

2
这对我有用。我无法弄清楚如何在VB.NET中使接受的答案起作用。 - Shea Daniels
4
我需要知道如何检查一个 Type 是否是枚举类型。+1 - Nathan

10

只需使用

if (theObject is Enum)
 //is an enum

6

对于泛型类型参数,可以进行约束而不是测试:

where T : Enum

C# 7.3!这是升级C#版本的一个非常好的理由 :) 项目属性->生成->高级 - ephraim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接