首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有where子句的foreach循环

问带有where子句的foreach循环
EN

Stack Overflow用户
提问于 2014-08-21 02:42:55
回答 3查看 60.4K关注 0票数 35

我想知道是否有可能在C#中创建一个带有where循环的foreach循环。不是使用if语句,而是在循环声明中使用where子句。

也许是这样的?

代码语言:javascript
复制
foreach(var n in people where n.sex == male)
{
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-08-21 02:43:51

是的,这是可能的:

方法语法:

代码语言:javascript
复制
foreach (var person in people.Where(n => n.sex == "male"))
{
}

或者相当冗长的查询语法:

代码语言:javascript
复制
foreach (var person in from person in people where person.sex == "male" select person) 
票数 66
EN

Stack Overflow用户

发布于 2014-08-21 02:46:03

看起来你需要的是一个lambda表达式来限制foreach处理的项目。

基于你有限的例子,如下所示:

代码语言:javascript
复制
foreach(var n in people.Where(n => n.sex == male))
{
}
票数 6
EN

Stack Overflow用户

发布于 2014-08-21 02:50:29

正如Yuval的回答和评论所指出的,您可以将任何查询--以“流畅”或“查询语法”形式--作为集合表达式。这导致了笨拙的构造,比如:

代码语言:javascript
复制
foreach(var person in from person in people where person.sex == male select person) 

这不仅非常冗长,而且在我给出的示例中,在查询和循环声明中都使用了简单名称person。您可能想知道为什么这是合法的,因为通常C#严格要求一个简单的名称在给定的局部变量作用域中只有一个含义。答案就在这里:http://ericlippert.com/2009/11/05/simple-names-are-not-so-simple-part-two/

IIRC C#设计团队曾短暂地考虑过您所描述的语法,但从来没有写过规范。这是一个很好的想法,但它并不是一个足够棒的语言扩展,不足以让它名列前茅。对于C#的未来版本来说,这将是一个很好的特性。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25412158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档