如何使代码块评估为bool
本文关键字:bool 评估 何使 代码 | 更新日期: 2023-09-27 18:17:37
我想看看是否有可能使一个代码块评估为bool(所以我可以做出很好的复合逻辑)。这个示例中的xxxx
if(a == 42 || <xxxxxxxxx> || p > 2)
我知道我可以把表达式放在那里,比如x>"foo"
等。但是如果我需要像
var foo = FiddleFoo(97);
foreach(var f in foo) {
if (fudge(f) > 42)
// true
}
// false
我知道这个例子可以重构为LINQ表达式,但这并不是普遍正确的(或者是-嗯?)
我知道我可以做一个单独的函数,但这似乎是错误的单一使用的东西。我尝试做一个lambda类型的东西(像javascript)
if .... (()=>{ stuff returning bool}())
但是不能编译
要将语句解析为布尔值,可以创建一个匿名方法,然后立即调用它。你已经做了这么多,试着用一个。不同之处在于,您需要为lambda添加一个委托上下文,以便编译器正确解释:
if(a == 42 || (new Func<bool>(() =>
{
var foo = FiddleFoo(97);
foreach(var f in foo)
{
if (fudge(f) > 42)
return true;
}
return false;
})() || p > 2)
{
//...
}
我根本不建议这样做。您最好将它提取到一个命名方法中,即使您只使用它一次,但这确实是可能的。
你需要的是:
Predicate<FiddleFoo> fiddleFoo = x => {
foreach(var f in x)
if(fudge(f) > 42) return true;
return false;
}
将你的代码变成:
if(a == 42 || fiddleFoo(new FiddleFoo(97)) || p > 2)