Ich weiß, dass Werttypen unveränderlich sein sollten, aber das ist nur ein Vorschlag, keine Regel, oder? Warum kann ich so etwas nicht tun:
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();
}
}
Die foreach-Schleife im Code wird nicht kompiliert, während die kommentierte for-Schleife einwandfrei funktioniert. Die Fehlermeldung:
Mitglieder von 'item' können nicht geändert werden, da es sich um eine 'foreach-Iterationsvariable' handelt.
Warum ist das so?
foreach
Schleifenvariable nicht geändert werden kann, aber ich habe nie wirklich gelernt, warum !