评估字符串表达式并转换为布尔值?
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# 语句。
您可以使用 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
我想计算字符串表达式并将结果转换为布尔值。
例如
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# 语句。
您可以使用 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