J'ai une matrice de chaîne que je veux ajouter à un constructeur à cordes à titre de Linq.
Qu'est-ce que j'essaie essentiellement de dire est "pour chaque élément de cette matrice, appendez une ligne à Ce stringbuilder ". P>
Je peux le faire assez facilement en utilisant une boucle de foresach, mais le code suivant ne semble rien faire. Qu'est-ce que je manque? P> où cela fonctionne: p>
4 Réponses :
public static class CommonExtensions { public static void DoForAll<T>(this IEnumerable<T> items, Action<T> action) where T: class { if (action == null) throw new ArgumentNullException("action"); foreach (var item in items) action(item); } }
Désolé, j'ai eu cette méthode d'extension depuis si longtemps, j'ai oublié ne fait pas partie du cadre. Public Static Class Commonextensions {Void public statique DOFORALL
@vladhorby: une vue sur la raison pour laquelle DOFORALL code> et d'autres extensions équivalentes ne sont pas implémentés: blogs.msdn.com/ericlippert/archive/2009/05/18/...
Si vous insistez pour le faire sous une manière Linqy:
var e = stringArray.Select(x => stringBuilder.AppendLine(x)); StringBuilder sb = e.Last(); Console.WriteLine(sb.ToString());
Merci Jason. Votre réponse explique pourquoi la méthode de sélection n'a pas atteint le résultat que je voulais et pourquoi le Foraach travaillait. Je vais rester avec le forach. J'étais vraiment curieux de ce que j'avais manqué. Maintenant je sais.
Est la dernière () garantie d'itérer? Plutôt que de chercher Stringarray [stringarray.count-1]? Je pense que j'aurais préféré Tolist ();
Utilisez la méthode d'extension "foreach" au lieu de "SELECT".
Array.ForEach(stringArray, x => stringBuilder.AppendLine(x));
@Gernold mis à jour, en fonction de vos commentaires. Merci.
Si vous utilisez .NET CORE, cela fonctionnera:
stringBuilder.AppendJoin(Environment.NewLine, stringArray);
Vous devez inclure une clarification que cette méthode n'est disponible que dans .NET Core, au moins pour l'instant. Il devrait également être dans .NET 5 quand c'est officiellement libéré.
C'est l'une des choses que j'aime sur Internet. 11 ans et nous avons une nouvelle réponse! Incroyable.
Je n'utiliserais pas la commande .Sélectionnez ... la commande de foresach n'est-elle pas disponible?
J'ai renommé StringBuilder et matrice de chaîne pour utiliser un premier caractère minuscule. Juste pour préciser que je parle de variables d'instance et pas de types.
Oui, c'est ... MSDN.MICROSSOFT.COM/EN-US/LIBRAY/ zecdkyw2.aspx :)