C# 在.NET中使用表达式解析器

C# 在.NET中使用表达式解析器,c#,.net,math,expression,C#,.net,Math,Expression,我不确定这是否是一个典型的stackoverflow问题,但我正在开发一个应用程序,在这个应用程序中,我应该不断检查一些条件(例如,如果某个变量的值超过阈值)。条件可以随时更改,最好是从代码外部更改 人们建议我应该使用表达式解析器,但我仍然不明白它们与.NET提供的基本数学运算相比有什么优势 您推荐一个好的.NET表达式解析器吗?我认为您需要动态LINQ。可以将条件作为字符串传递 以下是ScottGu的一篇博客文章: 我通过一个类似的问题发现了这一点:表达式解析器将提供更大的灵活性。您的表达式可

我不确定这是否是一个典型的stackoverflow问题,但我正在开发一个应用程序,在这个应用程序中,我应该不断检查一些条件(例如,如果某个变量的值超过阈值)。条件可以随时更改,最好是从代码外部更改

人们建议我应该使用表达式解析器,但我仍然不明白它们与.NET提供的基本数学运算相比有什么优势


您推荐一个好的.NET表达式解析器吗?

我认为您需要动态LINQ。可以将条件作为字符串传递

以下是ScottGu的一篇博客文章:


我通过一个类似的问题发现了这一点:

表达式解析器将提供更大的灵活性。您的表达式可以写成字符串中的公式集,它们可以是应用程序数据,而不是harcoded类/方法/任何东西

你可以这样做:

// Assign an action to an expression given as a string
ExpressionObserver.Add("(a+b+c)/2 > x-y", () => { DoSomething(); });
或:


但我不知道这一切增加的复杂性是否真的在你的情况下得到了回报。如果你只有几个简单的表达式,那可能太过分了。

什么可以改变?你的门槛?或者整个条件的形式?更可能的是,整个条件的形式。你能想出更简单的吗?表达式解析器可以正常工作,但似乎有点太多了。。你能举个例子吗?还有:你想用哪种语法?您是否也在引用变量(本地、全局、当前类内…)?我应该做的一个逻辑示例是,如果发生错误,我应该发送电子邮件报告它,如果错误再次发生,我至少在30分钟前不应该重新报告。。如果同一个错误消息出现超过100次,那么发送SMS…等等。我将问你一个愚蠢的问题,因为我是.NET的新手,LINQ与DB查询不相关吗?在我的例子中,数据存储在内存中(代码变量)。不,LINQ用于查询所有类型的集合(可枚举)。它是在DB中还是在内存中并不重要。
// Replace the old expression by something written by the user in the UI
someExpressionActionAssignment.Expression = MyLineEdit1.Text;