You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据类型名称获取对应的System.Nullable<T>类型?

获取字符串对应的Nullable类型

如果你的字符串是完整的类型全名(比如你给出的System.Nullable1[[System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]),最简单的方法就是直接用Type.GetType()`,它完全支持解析这种泛型类型格式:

string nullableFullName = "System.Nullable`1[[System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]";
Type nullableType = Type.GetType(nullableFullName);
// 此时 nullableType 等价于 typeof(DateTime?)

这里的Nullable1里的``1表示这是一个带1个泛型参数的类型,方括号内的是具体的泛型参数(包含完整的程序集信息),Type.GetType()可以直接解析这种格式。


如果你的字符串是简化形式(比如只给出Nullable<DateTime>或者你从类型信息字符串里提取出了基础类型名称),可以先获取基础类型,再通过泛型构造来生成Nullable类型:

  1. 先获取基础类型的Type对象:
Type baseType = Type.GetType("System.DateTime");
// 或者如果是已知的类型,直接用 typeof(DateTime)
  1. 用Nullable<>的泛型定义结合基础类型构造可空类型:
Type nullableType = typeof(Nullable<>).MakeGenericType(baseType);

如果你的原始字符串是类似{Name = "Nullable1" FullName = "..."}这种类型信息的描述字符串,你需要先提取出里面的FullName`值,再用上面的第一种方法:

string typeInfoStr = "{Name = \"Nullable`1\" FullName = \"System.Nullable`1[[System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]\"}";
// 截取FullName部分的内容
int start = typeInfoStr.IndexOf("FullName = \"") + "FullName = \"".Length;
int end = typeInfoStr.LastIndexOf("\"");
string fullName = typeInfoStr.Substring(start, end - start);

Type nullableType = Type.GetType(fullName);

注意事项

  • Type.GetType()如果找不到对应的类型会返回null,记得添加空值检查;
  • 如果基础类型不在默认的程序集(比如mscorlib)中,需要确保目标程序集已经被加载,或者类型全名要包含完整的程序集信息(就像示例里的System.DateTime, mscorlib, ...)。

内容的提问来源于stack exchange,提问作者Domitius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:05:19