tags:

views:

128

answers:

1

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 Integer 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,Integer and arrays.

As some friends have pointed out that here I mean user defined struct instead of predefined types, such as DateTime.

+2  A: 

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.

OregonGhost