c# - 如何以编程方式检查类型是结构还是类?

标签 c# .net class struct types

如何以编程方式检查类型是结构还是类?

最佳答案

使用Type.IsValueType :

Gets a value indicating whether the Type is a value type.

像这样使用它:

typeof(Foo).IsValueType

或者像这样在执行时:

fooInstance.GetType().IsValueType

反过来还有一个Type.IsClass属性(在我看来应该称为 IsReferenceType 但无论如何)根据您正在测试的内容,它可能更适合您的用途,也可能不适合您的用途。

如果没有 bool 否定,代码似乎总能更好地阅读,因此请使用有助于提高代码可读性的任何一种。


正如 Stefan 在下面指出的那样,为了正确识别结构,当涉及到枚举时,您必须小心避免误报。 enum 是一种值类型,因此 IsValueType 属性将为 enums 结构返回 true

因此,如果您真的在寻找结构,而不仅仅是一般的值类型,您需要这样做:

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

关于c# - 如何以编程方式检查类型是结构还是类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1827425/

相关文章:

java - 如何从Android中的其他类而不是Activity调用Activity中的方法?

c# - 从表中均匀分配行

c# - ASP.Net Web API Controller 单元测试失败

.net - 使用 C# 解析 Excel 文件

c++ - 如何只允许来自一组预定义常量的值?

javascript - uglifyjs 一个 javascript 类 - 意外的 token 错误

c# - 提升指针后释放 IntPtr 分配的内存

c# - 从 DLL 调用函数?

c# - 在 C# 中正确处理对象层次结构

c# - 从类访问表单控件?