How to check programmatically if a type is a struct or a class?

.net, c#, class, struct, types

Solution

Use `Type.IsValueType`:

Gets a value indicating whether the Type is a value type.

Use it either like this:

typeof(Foo).IsValueType

or at execution time like this:

fooInstance.GetType().IsValueType

Conversely there is also a `Type.IsClass` property (which should have been called `IsReferenceType` in my opinion but no matter) which may or may not be more appropriate for your uses based on what you are testing for.

Code always seems to read better without boolean negations, so use whichever helps the readability of your code.

As Stefan points out below, in order to properly identify structs you must be careful to avoid false positives when it comes to `enums`. An `enum` is a value type so the `IsValueType` property will return `true` for `enums` as well as `structs`.

So if you truly are looking for `structs` and not just value types in general you will need to do this:

Type fooType = fooInstance.GetType();
Boolean isStruct = fooType.IsValueType && !fooType.IsEnum;

Problem

How to check programmatically if a type is a struct or a class?

Original source

Related problems