コードインスペクション:共変配列変換
C# では、派生型の配列を基本型の配列として参照できます。 この Eric Lippert の投稿(英語)で説明したように、このデザインには利点と問題点があります。 問題について言えば、以下の例を見てみましょう。 string[] myStrings を ChangeFirstItem(object[] myArray) に渡すと、まだオブジェクトではなく文字列の配列があります。 最初の配列要素に int 値を代入しようとすると、実行時に ArrayTypeMismatchException が取得されます。 JetBrains Rider はここで問題を検出し、警告を出します。
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
}
この種の問題を解決する方法はいくつかあります。 JetBrains Rider は、初期配列の型を基本型の配列に変更するか、受け入れパラメーターの型を派生型の配列に変更する クイックフィックスを提案します。
これらの 2 つの修正に加えて、 ToArray<T>() メソッド、つまり myStrings.ToArray<object>() を使用することもできます。 上記の例では、 ToArray<T>() が配列のコピーを作成するため、この修正は機能しません。
2026 年 6 月 12 日