boucle foreach avec une clause where
Je me demandais si il est possible de créer une boucle foreach dans C#
avec un où la boucle. Pas avec une instruction if à l'intérieur, mais et la clause where dans la déclaration de la boucle.
Peut-être quelque chose comme ça?
foreach(var n in people where n.sex == male)
{
}
Pourquoi ne pas la syntaxe de méthode
Pas en double, mais connexes: stackoverflow.com/questions/9072126/linq-foreach-vs-foreach-if
foreach(var n in people.Where(p=>p.sex == male))
?Pas en double, mais connexes: stackoverflow.com/questions/9072126/linq-foreach-vs-foreach-if
OriginalL'auteur Michael Tot Korsgaard | 2014-08-20
Vous devez vous connecter pour publier un commentaire.
Oui, c'est possible:
Méthode Syntaxe:
Ou plutôt longue, la Syntaxe de la Requête:
Ou avec la syntaxe Linq:
foreach (var person in from i in people where i.sex == "male" select i) { ... }
(ne Pas le dire c'est mieux, juste à l'inscription comme une possibilité.)Oui. Le code dans mon commentaire et le code dans cette réponse à la fois de la compilation à la même chose.
C'est à l'aide de
Enumerable.Where
. Votre code ne compile exactement la même instruction que j'ai posté dans ma réponseIl est appelé la syntaxe de la requête, pas la syntaxe LINQ. Les deux syntaxes différentes façons à l'aide de LINQ.
OriginalL'auteur Yuval Itzchakov
Il ressemble à ce que vous avez besoin est une expression lambda pour limiter le nombre d'éléments de la foreach regard qui fonctionne avec.
Basé sur votre limitées exemple, quelque chose comme ceci:
OriginalL'auteur Dave
Que Yuval la réponse de ses commentaires le soulignent, vous pouvez mettre n'importe quelle requête, -- soit dans "fluent" ou "la syntaxe de la requête" -- comme la collection de l'expression. Cela conduit à adopter des constructions comme:
Non seulement c'est très détaillé, dans l'exemple que j'ai donné ici le simple nom de
person
est utilisé à la fois dans la requête et la boucle de la déclaration. Vous pourriez vous demander pourquoi c'est encore légal, car normalement C# est strict au sujet de s'assurer qu'un simple nom qui n'a qu'un seul sens dans un local donné la portée des variables. La réponse est ici: http://ericlippert.com/2009/11/05/simple-names-are-not-so-simple-part-two/IIRC le C# de l'équipe de conception brièvement considéré comme une syntaxe telle que vous la décrivez, mais n'a jamais eu, même d'aussi loin que l'écriture d'un cahier des charges. C'est une belle idée, mais elle n'est pas suffisamment impressionnant extension du langage pour le rendre en haut de la liste. Ce serait une fonctionnalité intéressante à la hauteur, pour une future version de C#.
OriginalL'auteur Eric Lippert