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

C#中是否存在类似VBA Application.Eval()的内置函数?

C# 中替代 VBA Application.Eval() 的方案

C# 没有直接对应 VBA Application.Eval() 的内置函数,但可以通过以下几种方式实现相同的表达式求值功能,支持数值比较、逻辑运算及文本比较:

1. 使用 Roslyn 脚本引擎

Roslyn 是官方的 .NET 代码分析引擎,支持动态编译并执行 C# 表达式,能完美处理你需要的各种运算场景。

首先需要安装 NuGet 包 Microsoft.CodeAnalysis.CSharp.Scripting,然后使用以下代码:

using Microsoft.CodeAnalysis.CSharp.Scripting;
using System.Threading.Tasks;

// 求值示例
bool evalResult = await CSharpScript.EvaluateAsync<bool>("4 > 2 && 10 != 62");
// 返回 true

evalResult = await CSharpScript.EvaluateAsync<bool>("\"True\" == \"False\" && (4 == 2 || 4 == 4)");
// 返回 false

evalResult = await CSharpScript.EvaluateAsync<bool>("\"True\" == \"True\" && (4 == 2 || 4 == 4)");
// 返回 true

注意:需要将 VBA 语法转换为 C# 语法,比如 AND 替换为 &&,<> 替换为 !=,字符串用双引号包裹。

2. 正确使用 NCalc

你提到 NCalc 仅支持数值运算,但实际上它完全支持字符串比较和逻辑运算,语法更接近 VBA,不需要大量修改原有表达式:

using NCalc;

// 求值示例
Expression expr = new Expression("4 > 2 AND 10 != 62");
bool evalResult = (bool)expr.Evaluate();
// 返回 true

expr = new Expression("'True' = 'False' AND (4 = 2 OR 4 = 4)");
evalResult = (bool)expr.Evaluate();
// 返回 false

expr = new Expression("'True' = 'True' AND (4 = 2 OR 4 = 4)");
evalResult = (bool)expr.Evaluate();
// 返回 true

NCalc 支持直接解析类似 VBA 风格的表达式,包括字符串单引号、AND/OR 逻辑运算符,以及嵌套括号。

3. 自定义简单表达式解析器(不推荐复杂场景)

如果不想依赖第三方库,可针对简单表达式写自定义解析逻辑,比如用正则拆分表达式片段,逐段比较求值。但这种方式仅适合逻辑简单的场景,嵌套逻辑、复杂运算处理起来会非常繁琐,维护成本高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:25:05