我想看看是否可以制作一个计算结果为 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}())
但这不会编译
最佳答案
要将语句解析为 bool 值,您可以创建一个匿名方法,然后立即调用它。您已经尝试使用 lambda 了。不同之处在于,您需要添加委托(delegate)上下文以便编译器能够正确解释 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)
{
//...
}
我根本不建议这样做。将其提取到命名方法中会更好,即使您只使用它一次,但这确实是可能的。
关于c# - 如何使代码块评估为 bool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33129812/