次のコードがあるとします。
static void Main() {
string[] myArray = {"One", "Two", "Three"};
PrintArray(myArray);
}
static void PrintArray(System.Array array1) {
foreach (string s in array1)
Console.WriteLine(s);
}
これらの行をエラーなしでコンパイルできたことに驚いています。なぜならPrintArray
、コンパイラは array1 がどのような種類の配列なのか (この場合は ) を認識できないからSystem.string[]
です。foreach 行を次のように変更するforeach (int s in array1)
と、コードはコンパイルされますが、実行時に無効なキャスト例外が生成されます。
この場合のコンパイルは、オブジェクトのみが foreach ステートメントで使用できることを保証するべきではありませんか?