You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中对包含关系和逻辑运算符的表达式进行求值?

C# 实现逻辑与关系混合表达式求值的方法

下面提供两种最常用的实现方案,覆盖不同场景的需求:

方案1:用表达式树实现(适合固定结构的表达式,性能最优)

.NET 内置的表达式树工具已经封装好了运算符优先级、括号逻辑、短路规则,不需要自己手动处理核心逻辑,示例代码如下:

using System;
using System.Linq.Expressions;

class Program
{
    static void Main()
    {
        // 声明表达式中的变量参数,这里统一用int类型,可根据需求替换为其他数值类型
        var aParam = Expression.Parameter(typeof(int), "a");
        var bParam = Expression.Parameter(typeof(int), "b");
        var cParam = Expression.Parameter(typeof(int), "c");
        var dParam = Expression.Parameter(typeof(int), "d");

        // 逐段构建示例表达式 (((a>b)&&(c<d))||(a==b))
        var aGreaterB = Expression.GreaterThan(aParam, bParam);
        var cLessD = Expression.LessThan(cParam, dParam);
        var andClause = Expression.AndAlso(aGreaterB, cLessD); // && 短路逻辑与
        var aEqualB = Expression.Equal(aParam, bParam);
        var finalExpr = Expression.OrElse(andClause, aEqualB); // || 短路逻辑或

        // 编译为可直接调用的委托
        var evaluateFunc = Expression.Lambda<Func<int, int, int, int, bool>>(
            finalExpr, aParam, bParam, cParam, dParam
        ).Compile();

        // 测试调用,传入a=2, b=1, c=3, d=4
        bool result = evaluateFunc(2, 1, 3, 4);
        Console.WriteLine(result); // 输出 True
    }
}

优势:性能最高,支持自定义类型变量,适合表达式结构固定、需要高频调用的场景

方案2:用DataTable.Compute实现(适合动态字符串表达式,代码最简)

如果你的表达式是动态输入的字符串格式(比如用户直接输入(((a>b)&&(c<d))||(a==b))文本),可以用DataTable自带的计算方法,不需要手动解析语法:

using System;
using System.Data;

class Program
{
    static void Main()
    {
        DataTable dt = new DataTable();
        int a = 2, b = 1, c = 3, d = 4;
        // 拼接为完整的表达式字符串
        string expressionStr = $"((({a}>{b})&&({c}<{d}))||({a}=={b}))";
        // 直接计算并转换结果
        bool result = Convert.ToBoolean(dt.Compute(expressionStr, ""));
        Console.WriteLine(result); // 输出 True
    }
}

优势:代码量极小,不需要提前知道表达式结构,支持动态拼接的用户输入表达式,覆盖绝大多数常规求值需求


内容的提问来源于stack exchange,提问作者Sreenath Sreenivasan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 17:39:04