想来断断续续用C#也有好一段时间了,今天才发现foreach语句中迭代变量(Iteration Variable)是read-only的,囧~~
DevDiv同步博客: http://www.devdiv.com/home.php?mod=space&uid=140638&do=blog&quickforward=1&id=43476
不过此read-only也是相对的,对于Values-type和reference-type要区别对待。
对于值类型,那么foreach中的变量是不能更改的;而对于引用类型,引用类型本身不能被更改,但是引用所指向的空间的数据则可以被更改。
如示例1和示例2:
int[] arr = new int[]{1,2,3,4,5};
foreach(int item in arr)
{
++item; // 提示Compile error
}
class Sample
{
public string TestMe = string.Empty;
}
class TestSample
{
public void Test()
{
Sample[] samples = new Sample[2];
samples[0] = new Sample();
samples[0].TestMe = "Sample1 OK";
samples[1] = new Sample();
samples[1].TestMe = "Sample2 OK";
foreach(var item in samples)
{
item.TestMe = "Data Referenced is Changed~~"; // 运行OK
}
}
}
DevDiv同步博客: http://www.devdiv.com/home.php?mod=space&uid=140638&do=blog&quickforward=1&id=43476