1: 先说for与foreach区别
int[] array_Test = new int[10]; for (int i = 0; i < 10; i++) { array_Test[i] = i; } foreach (int a in array_Test) { Console.Write(a.ToString()+","); } //foreach (int a in array_Test) //{ // a=a* 2; //} for (int i = 0; i < 10; i++) { array_Test[i] = array_Test[i] * 2; } foreach (int a in array_Test) { Console.Write(a.ToString() + ","); }
如果吧注释掉的那一段出错还原!就会出错,提示:a是一个迭代变量,无法为他赋值。
由此可见,两种区别:无法在foreach中对迭代变量赋值!
2: Linq中的foreach
var rs1 = dc.T_Employee.Select(r => r).Where(r => Convert.ToInt32( r.employeeAge) > 24); foreach(T_Employee t in rs1) { t.employeeAge += 10; }
这个却没有错!十分正常!为什么???
好了,再看一段代码!
int[] array_Test = new int[10]; for(int i=0;i<10;i++) { array_Test[i]=i; } var rs = array_Test.Select(r =>r).Where(r=>r%2==0); foreach (int a in rs) { a = a * 2;//又错了! 令人崩溃啊.... }
在看一段代码
namespace ConsoleApplication1 { public class Class_A { public int a; } class Program { static void Main(string[] args) { Class_A[] ca = new Class_A[10]; for (int i = 0; i < 10; i++) { ca[i].a = i; } foreach (Class_A c in ca) { Class_A ca1 = new Class_A(); c.a = c.a * 2;//正常 c = ca1;//错误,无法对迭代变量c进行赋值 } } } }
写到这里 !问题就明白了!在foreach中无法对迭代变量本身进行全部“修改” ,但是可以修改迭代变量的成员,属性,甚至字段!