【发布时间】:2011-01-18 07:51:54
【问题描述】:
对于Type,有一个属性IsClass,但是怎么知道Type是一个结构体呢?
对不起,我必须补充一些信息。
- 我正在使用 C#。
- 虽然
IsValueType是必要条件,但显然还不够。 Integer 也是一个值类型。
【问题讨论】:
标签: .net reflection struct types
对于Type,有一个属性IsClass,但是怎么知道Type是一个结构体呢?
对不起,我必须补充一些信息。
IsValueType是必要条件,但显然还不够。 Integer 也是一个值类型。
【问题讨论】:
标签: .net reflection struct types
t.IsValueType && !t.IsPrimitive && !t.IsEnum;
【讨论】:
!t.IsPrimitive 的原因。 Boolean、Byte、Char、Double(等等...)不是结构吗?
struct 来自“结构化”,指的是结构的复合性质(通常具有多个字段,尽管为 0或 1 是允许的)和 C 中关键字的起源,尽管 C# 和 C 结构在几个方面有所不同。从问题中可以清楚地看出,OP 正在考虑后一种方式而不是前者。这种观点没有采取“海龟一路向下”的观点,而是将无法进一步分解的单元视为结构。
那么,我猜你的要求就差不多了:
bool isStruct = myType.IsValueType && !myType.IsPrimitive;
但 DateTime 仍然没有被包括在内。也许您必须手动添加要排除的其他类型。
【讨论】:
使用这个:
x.GetType().IsValueType();
来自帮助:
Type::IsValueType 属性 获取一个值,该值指示 Type 是否为值类型。 值类型是表示为位序列的类型;值类型不是类或接口。在某些编程语言中,值类型被称为“结构”。枚举是值类型的一种特殊情况。
【讨论】:
Object 或它实现的接口将创建一个新的堆对象,其字段从被转换的值类型实例复制。对值类型调用 GetType 将首先将其转换为 Object,因为值类型没有 GetType 所需的类型限定符字段。
如果你在谈论 c#,你可以使用IsValueType 属性。
【讨论】:
您可以使用IsValueType。
【讨论】:
如果是值类型(例如,struct),请使用 Type.IsValueType。
【讨论】: