c# - 如何确定类型是自定义结构?

标签 c# struct

对于一个Type,在C#中有一个属性IsClass,但是如何判断一个Type是一个struct呢?

虽然IsValueType是必要条件,但显然是不够的。因为 int 也是一种值类型。

有人建议如下代码:

bool IsStruct = type.IsValueType && !type.IsEnum && !type.IsPrimitive;

但我不确定这是否是一种准确的方法。该公式应说明结构与其他类型(例如 DateTimeintarrays)之间的区别。

正如一些 friend 指出的那样,这里我指的是用户定义的结构而不是预定义的类型,例如DateTime

最佳答案

从技术上讲,int 也是一个 struct。 IsPrimitive 只是检查该类型是否是 CLR 处理方式稍有不同的基本类型之一。您应该接受建议 IsValueType && !IsEnum && !IsPrimitive

如果您只需要自定义结构(即 BCL 未提供的结构),您可能会幸运地排除 FullName 以 "System." 开头的类型,或者只包括您想要的类型如果您对按程序集或命名空间进行过滤或使用自定义属性感兴趣。

关于c# - 如何确定类型是自定义结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2296288/

相关文章:

c# - Queryable.Aggregate 不适用于空值

c# - EntityFramework 6.0 每行生成一个 DELETE

c - 结构和函数的段错误

C++:初始化结构和设置函数指针

c - 有没有办法让一个结构的单个成员持有不同结构类型中的一个?

使用 dirent 计算 C 中目录中的文件数第二次不起作用。

c# - 如何在 C# 中捕获 Windows 应用商店应用程序的窗口内容

c# - QuoteIdentifier 是否足以保护查询免受 Sql 注入(inject)攻击?

c# - 统一: Cannot register type from different assembly

c - 如何创建 const 结构数组