N'est-il pas autorisé à avoir un opérateur conditionnel dans une expression de Lambda dans pourcheach?
// :( items.ForEach(item => if (item.Contains("I Care About")) {whatICareAbout += item + ", ";}
4 Réponses :
Vous utilisez la forme plus courte d'expressions Lambda, ce qui permet uniquement une seule expressions.
Vous devez avoir la forme longue, qui permet plusieurs déclarations.
Par exemple: P>
items.ForEach(item => { if (item.Contains("I Care About")) whatICareAbout += item + ", "; });
Essayez des parenthèses:
string whatICareAbout = items.Aggregate("", (total, item) => item.Contains("I Care About") ? (total + item + ",") : total);
Qu'est-ce que vous essayez d'atteindre? Essayez-vous de former une chaîne d'articles séparés par des virgules dans lesquels ils contiennent une valeur particulière? Dans LINQ, vous obtiendrez cela en utilisant ce qui suit:
List<string> items = new List<string> { "Item 1", "Item 2", "Item I Care About", "Item I Care About", "Item I Care About" }; string whatICareAbout = items.Where(x => x.Contains("I Care About")) .Aggregate( (y, z) => y + ", " + z);
En utilisant agrégat code> pour Sting Concat est une idée très soignée que je n'ai pas pensée. Vous pouvez facilement le changer pour utiliser un
stringbuilder code> car
stringbililater code> a une interface fluide.
HAH, j'ajoutais juste un échantillon de code agrégé () à ma réponse initiale ... mais j'aime mieux le vôtre. +1!
Le problème était que l'expression Il y a un tour pour le faire fonctionner (juste pour le plaisir): P> chaîne code>. P>
items.ForEach(item => (item.Contains("I Care About") ?
whatICareAbout += item + "," : whatICareAbout += "").GetType());
Et pour .foreseach () code> vous avez besoin d'une déclaration :)
Sheesh je suis exceptionnellement impressionné par les réponses, toutes quelques minutes de poser :) Je pense que @slaks répond à l'intention de ma question, mais que l'agrégat () souffle mon esprit! :) merci encore tout le monde :)
Vous avez eu une expression de chaîne en tant que type d'opérateur conditionnel et vous aviez besoin d'une déclaration de votre méthode .Foreseach (). C'est pourquoi une erreur de compilation était là.
@Roman - je l'obtiens maintenant! Je pense à un? x: y comme court main pour if (a) {x} else {y} mais? Renvoie la valeur de x et y, qui était une chaîne dans ce cas ...