How to decide a Type is a custom struct?
c#, struct
Solution
Technically, an int is also a struct. IsPrimitive just checks if the type is one of the primitive types the CLR handles a little differently. You should be fine with the suggestion `IsValueType && !IsEnum && !IsPrimitive`.
If you want only custom structs (i.e. those not supplied by the BCL), you may have luck excluding types with a FullName that starts with `"System."`, or only including the ones you're interested in by filtering by assembly or namespace, or use a custom attribute.
Problem
For a `Type`, there is a property `IsClass` in C#, but how to decide a `Type` is a struct? Although `IsValueType` is a necessary condition, it is obviously not enough. For an `int` is a value type also. Someone suggests the following code: ``` bool IsStruct = type.IsValueType && !type.IsEnum && !type.IsPrimitive; ``` But I am not sure whether it is an accurate method. The formula should tell the difference between struct and other types such as `DateTime`, `int` and `array`s. As some friends have pointed out that here, I mean user defined struct and not predefined types, such as `DateTime`.