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?