ReSharper 2026.1 Help

コードインスペクション: 共変配列変換

C# では、派生型の配列を基本型の配列として参照できます。 この Eric Lippert の投稿(英語)で説明したように、このデザインには利点と問題点があります。 問題について言えば、以下の例を見てみましょう。 string[] myStringsChangeFirstItem(object[] myArray) に渡すと、まだオブジェクトではなく文字列の配列があります。 最初の配列要素に int 値を代入しようとすると、実行時に ArrayTypeMismatchException が取得されます。 ReSharper はここで問題を検出し、警告を出します。

void Test() { string[] myStrings = { "one","two","three" }; ChangeFirstItem(myStrings); //Co-variant array conversion can cause runtime exception... Console.WriteLine(myStrings[0]); } void ChangeFirstItem(object[] myArray) { myArray[0] = 10; //ArrayTypeMismatchException at runtime }

この種の問題を解決する方法はいくつかあります。 ReSharper は、初期配列の型を基本型の配列に変更するか、受け入れパラメーターの型を派生型の配列に変更する クイックフィックスを提案します。

これらの 2 つの修正に加えて、 ToArray<T>() メソッド、つまり myStrings.ToArray<object>() を使用することもできます。 上記の例では、 ToArray<T>() が配列のコピーを作成するため、この修正は機能しません。

2026 年 6 月 12 日