Type.GetType
がすべての無効な要素型に対して例外をスローする
Type.GetType(String) で、byref の byref を含め、無効な要素型を持つ "すべての" 型に対して TypeLoadException がスローされるようになりました。 以前は、このメソッドで一部のコーナー ケースに対して null
が返されていました。
以前の動作
Type.GetType(String) で、無効な要素型を持つほとんどの型に対して TypeLoadException がスローされていましたが、byref の byref などの少数のコーナー ケースは例外でした。 たとえば次のコードの場合、.NET 7 では null
が返されていました。
Type.GetType("System.Object&&")
新しい動作
Type.GetType(String) で、byref の 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)
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET