如何确定Type是否为struct?

给定一个具有Type属性的PropertyInfo实例,如何确定它是否为struct? 我发现有一些属性,如IsPrimitiveIsInterface等,但我不知道如何要求结构?

编辑:澄清问题。 假设我有一个方法:

 public Boolean Check(PropertyInfo pi) { return pi.Type.IsStruct; } 

我怎么写而不是IsStruct

Type.IsValueType应该可以解决问题。

(从这里捏)

把评论Antony Koch的答案放到一个扩展方法中:

 public static class ReflectionExtensions { public static bool IsCustomValueType(this Type type) { return type.IsValueType && !type.IsPrimitive && type.Namespace != null && !type.Namespace.StartsWith("System."); } } 

应该管用

结构和枚举( IsEnum )属于称为值类型( IsValueType )的超集。 基元类型( IsPrimitive )是结构的子集。 这意味着所有原始类型都是结构,但反之亦然; 例如, int是基本类型和结构,但decimal只是一个结构,而不是基本类型。

所以你看到唯一缺少的属性就是结构。 容易写一个:

 public bool IsStruct(this Type type) { return type.IsValueType && !type.IsEnum; }