J'ai ce code (C #): Il ne compilera pas. si je change S'il vous plaît quelqu'un peut-il expliquer ce qui se passe? p> p>
L'erreur est la suivante: p> chose code> à un class code> plutôt qu'un struct code >, cependant, cela compile. P>
4 Réponses :
une structure n'est pas un type de référence mais un type de valeur. P>
Si vous auriez une classe code> au lieu d'un struct code> pour chose code>, la boucle de foresach créerait une variable de référence pour vous, qui serait Pointez sur le bon élément de votre liste. Mais puisqu'il s'agit d'un type de valeur, il ne fonctionne que sur une copie de votre code> code>, qui est dans ce cas la variable d'itération. P>
Oui, c'est pertinent. Comme il s'agit d'un type de valeur, toute la structure est la variable de boucle et, par conséquent, aucune partie ne peut être modifiée.
Merci d'avoir expliqué la différence, Johannes. Très appréciée. +1
Plus ou moins de ce qu'il dit, le compilateur ne vous permettra pas de changer (parties de) la boucle Var dans un forach.
Utilisez simplement: p> et cela fonctionne lorsque chose code> est une classe car votre boucle variait est une référence et vous ne modifiez que des modifications. à l'objet référencé, non à la référence elle-même. p> p>
Une structure est un type de valeur mais une classe est un type de référence. C'est pourquoi il compile quand il s'agit d'une classe mais pas quand c'est une structure p>
Voir plus: http://www.albahaari.com/valuevsreftypes.aspx < / p>
Une syntaxe alternative que je préfère à la solution de @ Henk est ceci.
DateTime[] dates = new DateTime[10];
foreach(int index in Enumerable.Range(0, dates.Length))
{
ref DateTime date = ref dates[index];
// Do stuff with date.
// ...
}
Question associée Stackoverflow.com/ Questions / 1538301 / ...