RuntimeHelpers.GetSubArray<T>(T[], Range)によって返される配列インスタンスの型が、ソース配列と一致するように変更されました。
RuntimeHelpers.GetSubArray
は、配列の 範囲演算子 を実装するために C# コンパイラによって使用されます。
この動作の変更は、共変配列変換を使用するコードによってのみ観察できます。
以前の動作
以前は、 RuntimeHelpers.GetSubArray<T>(T[] array, Range range)
は T[]
型の配列インスタンスを返しました。
たとえば、 RuntimeHelpers.GetSubArray<object>(new string[1], ...)
によって返された配列インスタンスの型は object[]
。
新しい動作
.NET 9 以降では、 RuntimeHelpers.GetSubArray<T>(T[] array, Range range)
は、 array
パラメーターと同じ型の配列インスタンスを返します。
たとえば、 RuntimeHelpers.GetSubArray<object>(new string[1], ...)
によって返される配列インスタンスの型は string[]
。
導入されたバージョン
.NET 9 Preview 1
破壊的変更の種類
この変更は 動作の変更です。
変更の理由
C# パターンマッチング機能の設計では、 RuntimeHelpers.GetSubArray<T>(T[], Range) によって返される配列インスタンスの型がソース配列と一致することを前提としています。 以前の動作は、共変配列のスライスを使用する特定の複雑なパターン式の予期しない動作につながりました。 詳細については、 dotnet/roslyn#69053 を参照してください。
推奨されるアクション
推奨されるアクションは、配列の共分散に対する影響を受けるコードの依存関係を削除することです。
たとえば、次の変更を行います。
object[] arr = new string[1];
M(arr[1..2]);
宛先:
string[] arr = new string[1];
M(arr[1..2]);
影響を受ける API
.NET