C#中foreach语句的一个小问题

想来断断续续用C#也有好一段时间了,今天才发现foreach语句中迭代变量(Iteration Variable)是read-only的,囧~~
不过此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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值