C#将字符串表达式转换为布尔表达式

14

能否将字符串表达式转换为布尔条件?

例如,我得到了以下字符串:

var b = "32 < 45 && 32 > 20"
我想要创建一个布尔表达式并调用它。该字符串表示法也很灵活(为了更有趣),因此允许使用||,&&和()。

1
还可以查看 如何动态评估 C# 表达式? - nawfal
7个回答

8
请看CodePlex上的Flee(快速轻量级表达式求值器)。链接

1
哇,这个库真是太棒了!它完美地为我工作。非常感谢你的提示。 - Silvair L. Soares
感谢您指出这个库,@Richard,这正是我所需要的!!! - orlaqp

5
我会使用 Irony,这是一个.NET语言工具包。你可以使用Irony构建一个简单的语法,然后将字符串解析为可执行命令。在这个tutorialExpression Grammar Sample中有一个很好的算术语法示例,这是一个相当普遍的请求;)
我强烈建议使用适当的编译器,而不是Regex或自己编写的方法——如果您想添加更多规则,它将更加可扩展。

2

那有多快?我想它会相当慢。 - Oskar Kjellin
根本不快。基本上,您调用C#编译器,它会发出表达式的IL代码,然后将其包装在一个方法中,再放入一个类中,最终形成一个动态程序集,加载到当前应用程序域中,然后通过反射调用该方法以获取评估结果。但如果只是为了概念验证或其他类似目的,那么集成起来非常容易。 - Stefan Dragnev
是的,我知道它是如何工作的。我只是想指出这将是一种非常缓慢的方法。 - Oskar Kjellin

1

请看我的库Proviant。它是一个使用Shunting Yard算法来评估布尔表达式的.NET标准库。您还可以实现自己的语法。


2
仅仅链接到自己的库或教程并不是一个好的回答。链接到它,解释为什么它可以解决问题,提供如何实现的代码,并声明你编写了它,这样会得到更好的回答。参见:什么是“好”的自我推广? - Paul Roub

1
如果你处理的是相对简单的数学表达式,那么一个直接实现的 逆波兰算法 就可以解决问题。

0

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接