ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 如何:标识可以为 null 的类型(C# 编程指南) 可以使用 C# [typeof](https://msdn.microsoft.com/zh-cn/library/58918ffs.aspx) 运算符来创建表示可以为 null 的类型的 [Type](https://msdn.microsoft.com/zh-cn/library/system.type.aspx) 对象: ``` System.Type type = typeof(int?); ``` 还可以使用 [System.Reflection](https://msdn.microsoft.com/zh-cn/library/system.reflection.aspx) 命名空间的类和方法来生成表示可以为 null 的类型的 [Type](https://msdn.microsoft.com/zh-cn/library/system.type.aspx) 对象。但是,如果您尝试使用 [GetType](https://msdn.microsoft.com/zh-cn/library/system.object.gettype.aspx) 方法或 **is** 运算符在运行时获得可以为 null 的类型变量的类型信息,得到的结果是表示基础类型而不是可以为 null 的类型本身的 [Type](https://msdn.microsoft.com/zh-cn/library/system.type.aspx) 对象。 如果对可以为 null 的类型调用 **GetType**,则在该类型被隐式转换为 [Object](https://msdn.microsoft.com/zh-cn/library/system.object.aspx) 时将执行装箱操作。因此,[GetType](https://msdn.microsoft.com/zh-cn/library/system.object.gettype.aspx) 总是返回表示基础类型而不是可以为 null 的类型的 [Type](https://msdn.microsoft.com/zh-cn/library/system.type.aspx) 对象。 ``` int? i = 5; Type t = i.GetType(); Console.WriteLine(t.FullName); //"System.Int32" ``` C# 的 [is](https://msdn.microsoft.com/zh-cn/library/scekt9xw.aspx) 运算符还可以作用于可以为 null 的的基础类型。因此,不能使用 **is** 来确定变量是否为可以为 null 的类型。下面的示例演示 **is** 运算符将 Nullable&lt;int&gt; 变量视为 int 变量。 ``` static void Main(string[] args) { int? i = 5; if (i is int) // true //… } ``` 使用下面的代码来确定 [Type](https://msdn.microsoft.com/zh-cn/library/system.type.aspx) 对象是否表示可以为 null 的类型。请记住,如果 **Type** 对象是通过调用 [GetType](https://msdn.microsoft.com/zh-cn/library/system.object.gettype.aspx) 返回的,则此代码始终返回 false,如本主题中先前所述。 ``` if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) {…} ``` ## 请参阅 [可以为 null 的类型(C# 编程指南)](https://msdn.microsoft.com/zh-cn/library/1t3y8s4s.aspx) [装箱可以为 null 的类型(C# 编程指南)](https://msdn.microsoft.com/zh-cn/library/ms228597.aspx)