foreach (string var in students.Keys)
{
Console.WriteLine(var);
}
var具体是什么参数,
如果仅是一个形参那么为什么会不允许修改
他到底是怎样从集合中取数据的
又是否copy了副本
foreach (object var in students.Keys)
{
Console.WriteLine(var);
}
...全文
29512打赏收藏
foreach对数据的处理是怎样进行的,希望大家帮一下
foreach (string var in students.Keys) { Console.WriteLine(var); } var具体是什么参数, 如果仅是一个形参那么为什么会不允许修改 他到底是怎样从集合中取数据的 又是否copy了副本 foreach (object var in students.Keys) { Console.WriteLine(var); }
C#的foreach语句不会解析为IL代码中的foreach语句,C#编译器会把foreach语句转换为IEnumerable接口的方法和属性,这就是为什么在C#中用foreach语句循环的集合对像都必需实现IEnumerable的原因
假设有下面的foreach循环:
foreach(Person p in Persons)
{
Console.Write(p);
}
foreach语句会解析为下面的代码段。首先,调用GetEnumerator()方法,获得数组的一个枚举。然后再使用while循环:
IEnumerator enumerator = persons.GetEnumerator();
while(enumerator.MoveNext())
{
Person p = (Person)enumerator.Current;
Console.Write(p);
}
所以foreach (string var in students.Keys) 中var的数据类型必需和students.Keys的数据类型一致,因为我们看到上面解析的中间代码里是采用强制转换将枚举对像值转换为你定义的对像,如果你声明的对像不一致就会报错了。