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 arrays.
As some friends have pointed out that here, I mean user defined struct and not predefined types, such as DateTime.
5, the simple types provided by C#, such as int , double , and bool , are, in fact, all struct types.
In C# a struct is a 'value type', which can't be null.
Features of C# StructuresStructures can have methods, fields, indexers, properties, operator methods, and events.
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.
Should be at least
bool isStruct = type.IsValueType && !type.IsEnum &&
!type.IsPrimitive && type != typeof(decimal);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With