[英]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.