c# - 如何使代码块评估为 bool

标签 c#

我想看看是否可以制作一个计算结果为 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/

相关文章:

c# - 如何在 Asp.net mvc 中使用 Controller 的 Json 方法正确序列化 C# 长数?

c# - 为什么在使用SingleAsync时发生此错误?

c# - 在 VS2010 中制作 WPF 表单会比现在更容易吗?

c# - "only part of a readprocessmemory or writeprocessmemory request was completed"process.start 期间

c# - 为什么我的程序没有使用正确版本的 ITextSharp?

c# - CollectionView.View.Refresh 上的内存泄漏

c# - 在Docker容器中运行SQLite内存中单元测试时出错

c# - 如何直接从 Jquery 访问 .net MVC ViewData

c# - 如何防止 Microsoft Dynamics CRM 2011 中没有 ExecutionContext.CallerOrigin 的无限循环?

c# - Safari - 显示过期的 .NET 页面