【发布时间】:2019-06-13 12:33:07
【问题描述】:
试图找出在 .net/C# 中使用哪种方法来评估运行时的简单表达式。代码必须符合 .net 标准,并且我不想要奇怪的依赖。
我已经研究过使用 Microsoft.CodeAnalysis.CSharp.Scripting: How can I evaluate C# code dynamically? 但对我的用例来说似乎有点过分了。
public class Evaluate
{
private Dictionary<string, object> _exampleVariables = new Dictionary<string, object>
{
{"x", 45},
{"y", 0},
{"z", true}
};
private string _exampleExpression = "x>y || z";
private string _exampleExpression2 = @"if(x>y || z) return 10;else return 20;
";
public object Calculate(Dictionary<string, object> variables, string expression)
{
var result = //Magical code
return result;
}
}
【问题讨论】:
-
这就是你要找的吗? Evaluating string “3*(4+2)” yield int 18
-
是的,它看起来很有希望并且被接受的答案似乎类似于 Microsoft.CodeAnalysis.CSharp.Scripting。不过我担心电源。用户可以访问比表达式结果更多的资源。
-
如果不知道“简单”是什么意思,很难说。我不会将示例 2 称为简单 - 允许哪些其他语句?另外,为什么示例 2 需要
return? -
这是我的infix expression evalutor。处理变量和多位值和表达式语句的扩展留给读者。
-
@NetMage 示例 2 仅显示了将表达式编写为 if else 语句的可能性。
标签: c# string dynamic logic expression