使用带有ArrayList的foreach - 自动转换?

时间:2011-01-22 11:26:43

标签: c# casting arraylist

ArrayList x=new ArrayList();
x.Add(10);
x.Add("SS");

foreach(string s in x)
{
}

这是否意味着当foreach运行时它会尝试将数组列表的元素转换为输入foreach表达式?

3 个答案:

答案 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。