获取一个值,该值指示该类型是否为值类型.
可以这样使用:
typeof(Foo).IsValueType
或者在这样的执行时间:
fooInstance.GetType().IsValueType
相反,还有一个Type.IsClass
属性(在我看来,它应该称为IsReferenceType
,但不要紧),它可能更适合您,也可能不更适合您,这取决于您要测试的是什么.
在没有布尔否定的情况下,代码的可读性似乎总是更好,所以请使用对代码的可读性有帮助的任何一个.
正如Stefan在下面指出的,为了正确识别structs,你必须小心避免enums
的误报.enum
是一种值类型,因此IsValueType
属性将返回true
表示enums
以及structs
.
因此,如果你真的在寻找structs
种,而不仅仅是一般意义上的价值类型,你需要这样做:
Type fooType = fooInstance.GetType();
Boolean isStruct = fooType.IsValueType && !fooType.IsEnum;