Sdílet prostřednictvím


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 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