Type.GetType
会针对所有无效元素类型引发异常
现在,Type.GetType(String) 会针对具有无效元素类型的所有类型(包括 byref-of-byref)引发 TypeLoadException。 以前,此方法会针对某些极端情况返回 null
。
旧行为
对于大多数具有无效元素类型的类型,Type.GetType(String) 都会引发 TypeLoadException,但少数特殊情况(例如 byref-of-byref)除外。 例如,在 .NET 7 中,以下代码返回 null
:
Type.GetType("System.Object&&")
新行为
Type.GetType(String) 会针对具有无效元素类型的所有类型(包括 byref-of-byref)引发 TypeLoadException。 例如,以下代码(在 .NET 7 中返回 null
)在 .NET 8 中引发异常:
Type.GetType("System.Object&&")
引入的版本
.NET 8
中断性变更的类型
此更改为行为更改。
更改原因
.NET 有多个类型-名称分析程序,它们在这样的极端情况下有不同的行为并不罕见。 行为在以下方面是统一的:
- 如果未找到具有给定名称的类型,则返回
null
。 - 如果类型无效,则引发 TypeLoadException。 “无效”类型包括违反泛型约束的类型或参数类型的无效组合。
建议的操作
如果代码在这些极端情况下依赖于 null
返回值,请将其更改为捕获 TypeLoadException。
受影响的 API
- GetType(String)
- GetType(String, Boolean)
- GetType(String, Boolean, Boolean)
- GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>)
- GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)
- GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈