如何以编程方式检查类型是结构还是类?
最佳答案
使用 Type.IsValueType
:
可以这样使用:
typeof(Foo).IsValueType
或像这样的执行时间:
fooInstance.GetType().IsValueType
相反,还有一个
Type.IsClass
属性(在我看来应该称为IsReferenceType
,但无论如何),根据您要测试的内容,该属性可能适合或不适合您的用途。没有 bool 值的取反,代码似乎总是读起来更好,所以无论使用哪种方式,都有助于提高代码的可读性。
正如Stefan在下面指出的那样,为了正确识别结构,您必须小心避免对
enums
的误报。 enum
是一种值类型,因此IsValueType
属性将返回true
和enums
的structs
。因此,如果您真正在寻找
structs
而不是一般的值类型,则需要这样做:Type fooType = fooInstance.GetType();
Boolean isStruct = fooType.IsValueType && !fooType.IsEnum;