对于一个Type
,在C#中有一个属性IsClass
,但是如何判断一个Type
是一个struct呢?
虽然IsValueType
是必要条件,但显然是不够的。因为 int
也是一种值类型。
有人建议如下代码:
bool IsStruct = type.IsValueType && !type.IsEnum && !type.IsPrimitive;
但我不确定这是否是一种准确的方法。该公式应说明结构与其他类型(例如 DateTime
、int
和 array
s)之间的区别。
正如一些 friend 指出的那样,这里我指的是用户定义的结构而不是预定义的类型,例如DateTime
。
最佳答案
从技术上讲,int 也是一个 struct。 IsPrimitive 只是检查该类型是否是 CLR 处理方式稍有不同的基本类型之一。您应该接受建议 IsValueType && !IsEnum && !IsPrimitive
。
如果您只需要自定义结构(即 BCL 未提供的结构),您可能会幸运地排除 FullName 以 "System."
开头的类型,或者只包括您想要的类型如果您对按程序集或命名空间进行过滤或使用自定义属性感兴趣。
关于c# - 如何确定类型是自定义结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2296288/