views:

259

answers:

6

For a Type, there is a property IsClass, but how to know a Type is a Struct?

Sorry, I have to add some more information.

  1. I am using C#.
  2. Although IsValueType is a necessary condition, it is obviously not enough. For an Integer is a value type also.
+2  A: 

If it's a value type (e.g., a struct), use Type.IsValueType.

John Feminella
+2  A: 

You can use IsValueType.

klausbyskov
+3  A: 

If you are talking about c#, you can use the IsValueType property.

Clinton
A: 

Hi,

use this:

 x.GetType().IsValueType();

From help:

Type::IsValueType Property Gets a value indicating whether the Type is a value type. Value types are types that are represented as sequences of bits; value types are not classes or interfaces. Value types are referred to as "structs" in some programming languages. Enums are a special case of value types.

+1  A: 

Well then, I guess for your requirement then this comes close:

bool isStruct = myType.IsValueType && !myType.IsPrimitive;

but still DateTime isn't covered by that for example. Maybe you would have to add further types you want to exlude manually.

herzmeister der welten
DateTime gives the correct result of true with this code. It's enums that it doesn't handle correctly.
Jon Hanna
+1  A: 
t.IsValueType && !t.IsPrimitive && !t.IsEnum;
Jon Hanna