我知道值类型应该是不可变的,但这只是一个建议,而不是规则,对吗?那么为什么我不能做这样的事情:
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();
}
}
代码中的foreach循环无法编译,而带注释的for循环可以正常工作。错误信息:
无法修改“ item”的成员,因为它是“ foreach迭代变量”
这是为什么?
foreach
不能修改循环变量,但是我从来没有真正了解过为什么!