我知道值類型應該是不可變的,但這只是一個建議,而不是一個規則,對嗎? 那麼,爲什麼我不能做這樣的事情:在C#中,爲什麼我不能在foreach循環中修改值類型實例的成員?
struct MyStruct
{
public string Name { get; set; }
}
public class Program
{
static void Main(string[] args)
{
MyStruct[] array = new MyStruct[] { new MyStruct { Name = "1" }, new MyStruct { Name = "2" } };
foreach (var item in array)
{
item.Name = "3";
}
//for (int i = 0; i < array.Length; i++)
//{
// array[i].Name = "3";
//}
Console.ReadLine();
}
}
而評論for循環正常工作的代碼foreach循環不能編譯。錯誤消息:
不能修改「項目」的成員,因爲它是一個「的foreach迭代變量」
這是爲什麼?
+1:好問題。我已經知道很長一段時間了'foreach'循環變量不能被修改,但我從來沒有真正學過**爲什麼**! – jp2code 2011-04-13 15:18:11