gpt4 book ai didi

.net - 在 .NET 中将复杂的 boolean 条件从字符串转换为 boolean 值

转载 作者:行者123 更新时间:2023-12-02 15:44:10 25 4
gpt4 key购买 nike

我需要将复杂的表达式从字符串解析为 boolean 值。

它只能包含:
* boolean 值(真/假),
* 括号,
* AND/OR 操作数 (&&, ||)

例如:

bool.Parse("((true || false) && (false || false)) || (true || false)"

知道如何实现这一目标吗?

最佳答案

这是一个巧妙的评估器类,它为您提供 C# 代码中的 JScript.NET Eval 函数:

static public class Evaluator
{
private const string _jscriptSource =
@"package Evaluator
{
class Evaluator
{
public function Eval(expr : String) : String
{
return eval(expr);
}
}
}";

static private object _evaluator;
static private Type _evaluatorType;

[SuppressMessage("Microsoft.Performance", "CA1810:InitializeReferenceTypeStaticFieldsInline",
Justification = "Can't be done inline - too complex")]
static Evaluator()
{
InstantiateInternalEvaluator();
}

static private void InstantiateInternalEvaluator()
{
JScriptCodeProvider compiler = new JScriptCodeProvider();

CompilerParameters parameters;
parameters = new CompilerParameters();
parameters.GenerateInMemory = true;

CompilerResults results;
results = compiler.CompileAssemblyFromSource(parameters, _jscriptSource);

Assembly assembly = results.CompiledAssembly;
_evaluatorType = assembly.GetType("Evaluator.Evaluator");

_evaluator = Activator.CreateInstance(_evaluatorType);
}

static public int EvaluateToInteger(string statement)
{
string s = EvaluateToString(statement);
return int.Parse(s);
}

static public double EvaluateToDouble(string statement)
{
string s = EvaluateToString(statement);
return double.Parse(s);
}

static public decimal ForceEvaluateToDecimal(string statement)
{
decimal result;
bool s = Decimal.TryParse(statement, out result);
return result;
}

static public decimal EvaluateToDecimal(string statement)
{
string s = EvaluateToString(statement);
return decimal.Parse(s);
}

static public string EvaluateToString(string statement)
{
object o = EvaluateToObject(statement);
return o.ToString();
}

static public bool EvaluateToBool(string statement)
{
object o = EvaluateToObject(statement);
return (bool)o;
}

static public object EvaluateToObject(string statement)
{
try
{
return _evaluatorType.InvokeMember(
"Eval",
BindingFlags.InvokeMethod,
null,
_evaluator,
new object[] {statement}
);
}
catch (Exception)
{
InstantiateInternalEvaluator();
return null;
}
}
}

然后您就可以调用 Evaluator.EvaluateToBool(string)。从现有项目中提取,因此您可能需要进行调整!

关于.net - 在 .NET 中将复杂的 boolean 条件从字符串转换为 boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/690017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com