Je sais que les types de valeurs doivent être immuables, mais c'est juste une suggestion, pas une règle, n'est-ce pas ? Alors pourquoi je ne peux pas faire quelque chose comme ça :
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();
}
}
La boucle foreach dans le code ne compile pas alors que la boucle for commentée fonctionne bien. Le message d'erreur :
Impossible de modifier les membres de 'item' car il s'agit d'une 'variable d'itération foreach'.
Pourquoi ça ?
6 votes
+1 : Bonne question. Je sais depuis longtemps qu'une
foreach
la variable de boucle ne pouvait pas être modifiée, mais je n'ai jamais vraiment appris pourquoi !