RuntimeHelpers.GetSubArray vrátí jiný typ.
Typ instance pole vrácené službou RuntimeHelpers.GetSubArray<T>(T[], Range) se změnil tak, aby odpovídal zdrojovému poli. RuntimeHelpers.GetSubArray
kompilátor jazyka C# používá k implementaci operátoru rozsahu pro pole.
Tuto změnu chování lze pozorovat pouze kódem, který používá kovariantní převody polí.
Předchozí chování
RuntimeHelpers.GetSubArray<T>(T[] array, Range range)
Dříve vrátila instanci pole typu T[]
.
Například typ instance pole vrácený uživatelem RuntimeHelpers.GetSubArray<object>(new string[1], ...)
.object[]
Nové chování
Počínaje rozhraním .NET 9 RuntimeHelpers.GetSubArray<T>(T[] array, Range range)
vrátí instanci pole stejného typu jako array
parametr.
Například typ instance pole vrácené maticí RuntimeHelpers.GetSubArray<object>(new string[1], ...)
je string[]
.
Zavedená verze
.NET 9 Preview 1
Typ zásadní změny
Tato změna je změna chování.
Důvod změny
Návrh funkcí porovnávání vzorů jazyka C# předpokládá, že typ instance pole vrácený zdrojovým polem RuntimeHelpers.GetSubArray<T>(T[], Range) . Předchozí chování vedlo k neočekávanému chování určitých složitých vzorových výrazů, které používaly řezy kovariantních polí. Další informace najdete v tématu dotnet/roslyn#69053.
Doporučená akce
Doporučená akce spočívá v odebrání závislosti ovlivněného kódu na kovarianci pole.
Můžete například změnit:
object[] arr = new string[1];
M(arr[1..2]);
na:
string[] arr = new string[1];
M(arr[1..2]);
Ovlivněná rozhraní API
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro