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.GetSubArray
A 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.
Javasolt művelet
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
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: