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

Loj*_*jol 10 c# casting arraylist

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

foreach(string s in x)
{
}
Run Code Online (Sandbox Code Playgroud)

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

Meh*_*ari 12

是的,如果一个元素不能转换为该类型,那么你将得到一个InvalidCastException.你的情况,你可以不投盒装intstring造成一个异常被抛出.

基本上,它相当于:

foreach (object __o in list) {
    string s = (string)__o;
    // loop body
}
Run Code Online (Sandbox Code Playgroud)


Ser*_*kiy 9

根据foreach语句的c#规范,你的代码相当于

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();
}
Run Code Online (Sandbox Code Playgroud)