est-il possible en C # à quelque chose comme le suivant
foreach (ref string var in arr) { var = "new value"; }
5 Réponses :
Il n'y a pas de telles constructions pour Mise à jour forte> une boucle; Un itérateur est en lecture seule. Par exemple, ce qui suit fournit un itérateur parfaitement valide: Comment serait-il à jour? ce que fort> mettrait à jour? p> Si les données sont une matrice / liste / etc., alors quelque chose comme: p> ou autres options en fonction du conteneur spécifique. P> mise à jour; À une poussée forte> forte>, une méthode d'extension: p>
Vous pouvez même vouloir mettre la liste de retour ; code> à la fin de votre méthode d'extension UpdateAll B> de sorte qu'elle puisse être chaînée et / ou renvoyée s'il est utilisé directement dans une mission telle que
List
Non. La relève foreach code> est simplement Syntaxe Sugar sur le dessus du
iEnumerable code>
interface. Cette interface définit une méthode pour obtenir en Ieumerator code>
qui à son tour a des méthodes pour faire lecture seule em> énumération: p>
strictement i> parle, il n'a même pas besoin d'iEnumerable / ienumerator, et il n'utilise jamais RESET () - mais en effet (+1)
Et si vous utilisez un tableau, cela n'utilise pas du tout iEnumerable.
Dans le cas d'une chaîne, non; Les chaînes C # sont immuables (ne peuvent pas être changées). Si vous énumérez des objets d'un type différent et mutable, vous pouvez modifier les propriétés de ces objets. P>
for(int i = 0; i < strings.Count; ++i) { string s = strings[i]; //do work s = s.ToUpperInvariant(); strings[i] = s; }
En fait, la "chaîne s" est à l'extérieur b> la boucle; Cela est important de comprendre le problème infâmé de pourachis / de capture. Et il utilisera Dispose () code> si Idisposable est implémentée
Était plus pour la démonstration que la précision, mais vous avez raison, @MARC Gravell. J'ai déplacé la chaîne extérieure sur la boucle. En laissant disposer () comme un exercice au lecteur comme orthoganol à cette discussion.
Dans le cas d'une chaîne, non; C # Les chaînes sont immuables (ne peuvent pas être modifié). Si vous énumérez-vous sur objets d'un type différent et mutable, Vous pouvez changer les propriétés de ces objets. p>
juste pour illustrer ce que Jacob parle de. Considérez l'extrait de code ci-dessous: p>
xxx pré> en effet, si vous essayez d'attribuer à "obj" comme ci-dessus, vous obtiendrez une erreur de temps de compilation. Mais rien ne vous empêche de modifier les propriétés de Myint à travers la référence "obj" p> blockQuote>