À l'aide conditionnelle lambda états avec un foreach Action sur une liste
Pourquoi ne peux-je faire quelque chose comme cela?
Si j'ai un List<String> myList
remplie avec les éléments, je veux être en mesure d'agir sur chacun des membres d'un conditionnel façon comme:
myList.ForEach(a => { if (a.Trim().Length == 0) a = "0.0"; })
Mais ce ne sera pas compiler. Im deviner ses quelque chose à voir avec le manque de valeur de retour?
Im essayant de préparer une liste de chaînes de caractères pour la conversion en double, et je veux le vide éléments à afficher '0.0', donc je peux tout simplement de convertir l'ensemble de la liste en une seule fois.
Je vous recommande fortement de visiter www.lambdaexpression.net
OriginalL'auteur Alex | 2009-03-24
Vous devez vous connecter pour publier un commentaire.
ForEach n'est pas mutable, il ne change pas la structure de données en quelque sorte.
Vous pouvez soit:
Exemple #1:
Avec .NET 3.5 et Linq:
Avec .NET 3.5, et non pas à l'aide de Linq-syntaxe, mais à l'aide de Linq-code:
Modifier: Si vous voulez produire une nouvelle liste de doubles, vous pouvez aussi le faire en une seule fois à l'aide de Linq:
Notez que l'utilisation de "0.0" au lieu de "0" s'appuie sur le point décimal le plein caractère de fin. Sur mon système, il n'est pas, je l'ai donc remplacé par "0", mais de façon plus appropriée serait de modifier l'appel de Double.Analyser pour prendre explicite de mise en forme numérique, comme ceci:
Pas que je sache, et j'en doute, la plupart des Linq-les méthodes sont construites dans un style fonctionnel, qui interdit toute modification de l'entrée en aucune façon.
Merci pour l'excellente explication.
OriginalL'auteur Lasse Vågsæther Karlsen
Ce que vous voulez, c'est:
Qui permettrait:
Il suffit de mettre la
MutateEach
méthode à un public statique de la classe de votre choix et assurez-vous d'avoir une aide de la directive qui permettra de le trouver.Savoir si cela en vaut la définition de quelque chose comme cela dépend à quelle fréquence vous souhaitez utiliser. Notez qu'il convient de faire une extension sur
IList
au lieu deIEnumerable
, afin que nous puissions effectuer les mises à jour, ce qui le rend moins largement applicable.Les gars, vous êtes fantastique. - Je apprendre quelque chose à chaque fois que je pose une question sur ce site.
OriginalL'auteur Daniel Earwicker
@daniel-earwicker de
MutateEach
solution d'Extension est une bonne solution.Bien que, de retour d'un nouveau
List
, vous avez la possibilité d'utiliserList.ConvertAll<TTo>(Converter<TFrom,TTo>(Func<TFrom, TTo>))
, qui a été autour depuis .NET 2.0.Il n'est pas Linq, ou Lambda.
Référence MSDN - Liste.ConvertAll
OriginalL'auteur Brett Caswell