次のコードを想像してください。
class foreach_convert
{
public static void method2()
{
List<IComparable> x = new List<IComparable>();
x.Add(5);
foreach (string s in x)
{
//InvalidCastException in runtime
}
}
}
なぜこの foreach の動作は C# に似ていないのでしょうか? ここで起こるのは、サブクラスへの暗黙のキャストです。これはエラーが発生しやすく、言語の他のすべての場所で禁止されているようです。それとも私は正しくありませんか?
PS私が尋ねている理由は、プロジェクトの同様のコードにバグがあり、以前は like と呼ばれていた外部ライブラリからカスタム コレクションを反復処理していたSomeTypeCollection
が、実際には基本型アイテムのコレクションを提供していたためです。のアイテムが含まれている可能性がありSomeOtherType
ます。私のせいですが、言語もコンパイラも明示的なヒント/警告を提供しませんでした。これはC#では非常に珍しいことです...