Megosztás a következőn keresztül:


A RuntimeHelpers.GetSubArray eltérő típust ad vissza

A visszaadott RuntimeHelpers.GetSubArray<T>(T[], Range) tömbpéldány típusa a forrástömbhöz igazodva módosult. RuntimeHelpers.GetSubArrayA C#-fordító a tömbök tartományoperátorának implementálásához használja.

Ez a viselkedésváltozás csak kovariant tömbkonverziókat használó kóddal figyelhető meg.

Előző viselkedés

RuntimeHelpers.GetSubArray<T>(T[] array, Range range) Korábban egy tömbpéldányt T[]adott vissza.

Például a függvény által visszaadott RuntimeHelpers.GetSubArray<object>(new string[1], ...) tömbpéldány típusa.object[]

Új viselkedés

A .NET 9-től RuntimeHelpers.GetSubArray<T>(T[] array, Range range) kezdődően a paraméter típusával megegyező típusú array tömbpéldányt ad vissza.

A visszaadott RuntimeHelpers.GetSubArray<object>(new string[1], ...) tömbpéldány típusa például a következő string[].

Bevezetett verzió

.NET 9 előzetes verzió 1

A kompatibilitástörő változás típusa

Ez a változás viselkedésbeli változás.

A változás oka

A C# mintaegyeztetési funkcióinak kialakítása feltételezi, hogy a visszaadott tömbpéldány típusa megegyezik a forrástömbkel RuntimeHelpers.GetSubArray<T>(T[], Range) . Az előző viselkedés bizonyos összetett mintakifejezések váratlan viselkedéséhez vezetett, amelyek a kovariant tömbök szeletelését használták. További információ: dotnet/roslyn#69053.

Az ajánlott művelet az érintett kód függőségének eltávolítása a tömb kovariancián.

Például módosítsa a következőt:

object[] arr = new string[1];
M(arr[1..2]);

erre:

string[] arr = new string[1];
M(arr[1..2]);

Érintett API-k