如何确定Type是否为struct?

时间:2010-02-01 11:29:20

标签: c# .net types struct

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

修改 澄清问题。 假设我有一个方法:

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

我写的是什么,而不是IsStruct

3 个答案:

答案 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;
}