如何以编程方式检查类型是结构还是类?

最佳答案

使用 Type.IsValueType :



可以这样使用:

typeof(Foo).IsValueType

或像这样的执行时间:
fooInstance.GetType().IsValueType

相反,还有一个 Type.IsClass 属性(在我看来应该称为IsReferenceType,但无论如何),根据您要测试的内容,该属性可能适合或不适合您的用途。

没有 bool 值的取反,代码似乎总是读起来更好,所以无论使用哪种方式,都有助于提高代码的可读性。

正如Stefan在下面指出的那样,为了正确识别结构,您必须小心避免对enums的误报。 enum是一种值类型,因此IsValueType属性将返回trueenumsstructs

因此,如果您真正在寻找structs而不是一般的值类型,则需要这样做:
Type fooType = fooInstance.GetType();
Boolean isStruct = fooType.IsValueType && !fooType.IsEnum;

10-04 11:37