如何以编程方式判断类型是 struct 还是类?

推荐答案

使用Type.IsValueType:

获取一个值,该值指示该类型是否为值类型.

可以这样使用:

typeof(Foo).IsValueType

或者在这样的执行时间:

fooInstance.GetType().IsValueType

相反,还有一个Type.IsClass属性(在我看来,它应该称为IsReferenceType,但不要紧),它可能更适合您,也可能不更适合您,这取决于您要测试的是什么.

在没有布尔否定的情况下,代码的可读性似乎总是更好,所以请使用对代码的可读性有帮助的任何一个.


正如Stefan在下面指出的,为了正确识别structs,你必须小心避免enums的误报.enum是一种值类型,因此IsValueType属性将返回true表示enums以及structs.

因此,如果你真的在寻找structs种,而不仅仅是一般意义上的价值类型,你需要这样做:

Type fooType = fooInstance.GetType();
Boolean isStruct = fooType.IsValueType && !fooType.IsEnum;

.net相关问答推荐

API响应返回null错误. NET MAUI

更改列表中的值

在.NET C#中截断整个单词的字符串

lock() 是否保证按请求的顺序获得?

string.Format 如何处理空值?

.NET 中是否有一种简单的方法来获得数字的st、nd、rd和th结尾?

通用枚举到int的C#非装箱转换?

如何通过 LINQ 比较没有时间的 DateTime?

获取 .NET Framework 目录路径

寻找 .NET 的命令行参数解析器

.NET 中是否有可序列化的通用键/值对类?

如何禁用 Alt + F4 关闭表单?

是否有 Linq 方法可以将单个项目添加到 IEnumerable

如何确定字符串是 C# 中的有效 IPv4 还是 IPv6 地址?

等待 Async Void 方法调用以进行单元测试

我应该绑定到 ICollectionView 还是 ObservableCollection

如何获取命名空间中的所有类?

将 SignalR 2.0 .NET 客户端重新连接到服务器集线器的最佳实践

如何卸载Microsoft .NET Core 1.0.0 RC2 - VS 2015 Tooling Preview 1?

如何在我的机器上找到 fuslogvw.exe?