我想知道是否有可能在C#中创建一个带有where循环的foreach循环。不是使用if语句,而是在循环声明中使用where子句。
也许是这样的?
foreach(var n in people where n.sex == male)
{
}发布于 2014-08-21 02:43:51
是的,这是可能的:
方法语法:
foreach (var person in people.Where(n => n.sex == "male"))
{
}或者相当冗长的查询语法:
foreach (var person in from person in people where person.sex == "male" select person) 发布于 2014-08-21 02:46:03
看起来你需要的是一个lambda表达式来限制foreach处理的项目。
基于你有限的例子,如下所示:
foreach(var n in people.Where(n => n.sex == male))
{
}发布于 2014-08-21 02:50:29
正如Yuval的回答和评论所指出的,您可以将任何查询--以“流畅”或“查询语法”形式--作为集合表达式。这导致了笨拙的构造,比如:
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#的未来版本来说,这将是一个很好的特性。
https://stackoverflow.com/questions/25412158
复制相似问题