给定PropertyInfo
实例,它具有Type
属性,如何确定它是否为结构?我发现有IsPrimitive
,IsInterface
等属性,但我不确定如何要求结构?
修改 澄清问题。 假设我有一个方法:
public Boolean Check(PropertyInfo pi)
{
return pi.Type.IsStruct;
}
我写的是什么,而不是IsStruct
?
答案 0 :(得分:11)
Type.IsValueType应该可以解决问题。
(从here收缩)
答案 1 :(得分:1)
将对Anthony Koch的回答的评论纳入扩展方法:
public static class ReflectionExtensions {
public static bool IsCustomValueType(this Type type) {
return type.IsValueType && !type.IsPrimitive && type.Namespace != null && !type.Namespace.StartsWith("System.");
}
}
应该有效
答案 2 :(得分:1)
结构和枚举(IsEnum
)属于称为值类型(IsValueType
)的超集。基元类型(IsPrimitive
)是结构的子集。这意味着所有原始类型都是结构,但反之亦然;例如,int
是基本类型和结构,但decimal
只是结构,而不是基本类型。
所以你看到唯一缺少的属性就是结构。容易写一个:
public bool IsStruct(this Type type)
{
return type.IsValueType && !type.IsEnum;
}