【发布时间】:2010-02-19 12:44:46
【问题描述】:
对于一个Type,C#中有一个属性IsClass,但是如何判断一个Type是一个结构体呢?
虽然IsValueType是必要条件,但显然还不够。因为int 也是一个值类型。
有人建议以下代码:
bool IsStruct = type.IsValueType && !type.IsEnum && !type.IsPrimitive;
但我不确定这是否是一种准确的方法。该公式应该可以区分结构和其他类型,例如DateTime、int 和arrays。
正如一些朋友指出的,这里我的意思是用户定义的结构而不是预定义的类型,比如DateTime。
【问题讨论】:
-
我不确定我是否理解这个问题。 DateTime is 是一个结构。为什么你会在那里返回 false?
-
其实 int 也是一个结构体类型。语言规范声明“C# 提供了一组预定义的结构类型,称为简单类型”。
-
知道你为什么关心会很有趣。你在做什么?可能有更好的方法来做你想做的事。
-
为什么需要这个功能?我正在使用反射来显示数据。当我遇到一个用户结构时,我会显示它的字段。