评估字符串表达式并转换为布尔值?

Evaluate string expression and convert to bool?

我想计算字符串表达式并将结果转换为布尔值。

例如

string expression = !((71 > 70) && (80 > 71)) || 72 < 71 ;

上面的表达式必须求值并且 return 为真。

谁能建议如何计算表达式和 return 布尔值?

如果您的要求是将 expressoin 输出作为字符串 "true" 然后使用它,

string expression = Convert.ToString(!((71 > 70) && (80 > 71)) || 72 < 71);

如果要求是获取 bool "true" 然后使用这个,

bool expression = !((71 > 70) && (80 > 71)) || 72 < 71;

但是你的表达式好像会return假,要让它变成真,去掉“!”如下,

string expression = Convert.ToString(((71 > 70) && (80 > 71)) || 72 < 71);            
bool bool_expression = ((71 > 70) && (80 > 71)) || 72 < 71;

我不相信有任何内置的表达式求解器可以用于这种表达式计算。我会推荐 Microsoft.CodeAnalysis.CSharp.Scripting 进行评估。

string expression = "!((71 > 70) && (80 > 71)) || 72 < 71";
bool output = CSharpScript.EvaluateAsync<bool>(expression).Result;
// -> false

你的问题有问题

  • 表达式 的计算结果不会为真。我不知道你为什么这么认为并要求它这样做。执行完上述脚本后,得到的 bool 将为 false。

!((71 > 70) && (80 > 71)) || 72 < 71
!((true) && (true)) || false
!(true & true)
false

  • 你不能声明一个没有引号的字符串; string express = "within quotes";。 post (string expression = !((71 > 70) && (80 > 71)) || 72 < 71 ;) 中的上述语句不是有效的 C# 语句。

Test snippet here at #dotnetfiddle

您可以使用 NCalc 包。下面的代码产生 "False"

using System;
using NCalc;

public class Program
{
    public static void Main()
    {
        Expression e = new Expression("!((71 > 70) && (80 > 71)) || 72 < 71");
        bool v = (bool)e.Evaluate();
        Console.WriteLine(v.ToString());
    }
}

.Net Fiddle: https://dotnetfiddle.net/02c5ww