繁体   English   中英

'if'语句条件中的Lambda表达式

[英]Lambda expression in 'if' statement condition

我是C#的新手,但据我了解,此代码应该可以工作。 为什么不起作用?

这是我的代码的示例。

List<Car> cars // This has many cars initialized in it already
if (() => {
   foreach(Car car in cars){
       if (car.door == null) return true;
   }
}){then .......}

简而言之,如果任何汽车没有门,我想要的代码就是运行if语句。

尝试编译后,出现此错误:

无法将lambda表达式转换为类型'bool',因为它不是委托类型。

如果要检查是否有没有门的汽车,则只需使用Enumerable.Any它确定序列中的任何元素是否满足条件:

if (cars.Any(c => c.door == null))
   // then ...

只是为了好玩:您应该执行lambda以获得if条件中的布尔结果(但在这种情况下,请使用Any)

Func<bool> anyCarDoesNotHaveDoor = () => { 
    foreach(var car in cars)
       if (car.door == null)
           return true;
    return false; 
};

if (anyCarDoesNotHaveDoor())
   // then ...

我介绍了局部变量以使情况更清楚。 但是您当然可以使这个难题更加复杂

 if (new Func<bool>(() => { 
        foreach(var car in cars)
           if (car.door == null)
               return true;
        return false; })())
    // then ...    

好吧,错误说明了一切。 if语句期望布尔表达式而不是委托。 如果您要呼叫该代表(假设它返回的是bool ),则可以。 但是, if不知道调用它。

最简单的方法是使用Any LINQ扩展方法:

if (cars.Any(car => car.door == null))

Any方法知道实际在集合的每个成员上调用lambda表达式,并返回bool 这使其成为if语句的有效布尔表达式。

如果您想对没有门的汽车做一些实际的事情:

foreach (var car in cars.Where(car => car.door == null)) {
    car.door = <whatever>;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM