ArrayList x=new ArrayList();
x.Add(10);
x.Add("SS");
foreach(string s in x)
{
}
这是否意味着当foreach运行时它会尝试将数组列表的元素转换为输入foreach表达式?
答案 0 :(得分:11)
是的,如果某个元素无法转换为该类型,您将获得InvalidCastException
。在您的情况下,您不能将装箱int
强制转换为string
,从而导致抛出异常。
基本上,它相当于:
foreach (object __o in list) {
string s = (string)__o;
// loop body
}
答案 1 :(得分:9)
根据foreach语句的c#specification,您的代码等同于
ArrayList x=new ArrayList();
x.Add(10);
x.Add("SS");
IEnumerator enumerator = (x).GetEnumerator();
try {
while (enumerator.MoveNext()) {
string element = (string)enumerator.Current; // here is casting occures
// loop body;
}
}
finally {
IDisposable disposable = enumerator as System.IDisposable;
if (disposable != null) disposable.Dispose();
}
答案 2 :(得分:1)
当然,当您运行该循环并将其强制转换时,编译器会尝试将其强制转换为指定的类型,在您的情况下,它将是String。如果它不能这样做,它将引发InvalidCastException。