想象一下下面的代码:
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# 来说是非常不寻常的......