如何确定Type是否为struct?
给定一个具有Type
属性的PropertyInfo
实例,如何确定它是否为struct? 我发现有一些属性,如IsPrimitive
, IsInterface
等,但我不知道如何要求结构?
编辑:澄清问题。 假设我有一个方法:
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; }