Type.GetType
löst Ausnahme für alle ungültigen Elementtypen aus.
Type.GetType(String) löst jetzt einen TypeLoadException für alle Typen mit einem ungültigen Elementtyp aus, einschließlich byref-of-byref. Zuvor wurde null
diese Methode für einige Corner Cases zurückgegeben.
Vorheriges Verhalten
Type.GetType(String) Hat für TypeLoadException die meisten Typen einen ungültigen Elementtyp mit Ausnahme einiger Corner Cases wie byref-of-byref angezeigt. Beispielsweise der folgende Code, der null
in .NET 7 zurückgegeben wird:
Type.GetType("System.Object&&")
Neues Verhalten
Type.GetType(String) löst einen TypeLoadException für alle Typen mit einem ungültigen Elementtyp aus, einschließlich byref-of-byref. Beispielsweise löst der folgende Code (der null
in .NET 7 zurückgegeben wird) eine Ausnahme in .NET 8 aus:
Type.GetType("System.Object&&")
Eingeführt in Version
.NET 8
Typ des Breaking Changes
Diese Änderung ist eine Verhaltensänderung.
Grund für die Änderung
.NET hatte mehrere Typennamen-Parser, und es war nicht ungewöhnlich, dass sie in Corner Cases wie dieser ein anderes Verhalten aufweisen. Das Verhalten wurde vereinheitlicht bei:
- Wenn der Typ mit dem angegebenen Namen nicht gefunden wird, geben Sie den Wert
null
zurück. - Wenn der Typ ungültig ist, wird TypeLoadException ausgelöst. "Ungültige" Typen umfassen Typen mit generischen Einschränkungsverletzungen oder eine ungültige Zusammensetzung von Parametertypen.
Empfohlene Maßnahme
Wenn Ihr Code auf einen null
Rückgabewert für diese Corner Cases angewiesen ist, ändern Sie ihn stattdessen, um einen TypeLoadException abzufangen.
Betroffene APIs
- 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)