我正在寻找一种能够很容易地为我解析数学表达式的语言,但也能够根据需要调用函数和引用变量。 Jeval看起来就像我在寻找,但不幸的是我在C#工作。是否有.Net等同于jeval?
答案 0 :(得分:3)
您可以使用像IronRuby这样的DLR语言来执行此操作。您可以在C#应用程序中执行(eval)脚本文件。
答案 1 :(得分:2)
在C#4.0中,没有任何东西可以直接使用。预计在C#5.0中,你会看到它,但现在对你没有帮助。
还有另一种选择......您可以使用Code DOM动态编译一些代码,然后运行它:Quick example.
不幸的是,这种方法有一些重大缺点。首先,它很慢。在现代机器上,它可能需要长达四分之一秒,只需编译最小的代码片段。其次,您实际上是在创建一个每次执行此操作时都会加载的新DLL。如果您的系统喜欢运行动态代码,那么您的工作空间中将会有大量动态生成的DLL。要解决这个问题,您可以在单独的应用程序域中执行动态代码,但现在您开始变得非常复杂。
我的建议:使用嵌入式脚本语言,如IronRuby,然后生成Ruby代码。您可以比我刚才概述的方法更快地评估嵌入式脚本语言。
答案 2 :(得分:0)
你可以用反射做到这一点。我没有详细信息,但我使用反射来执行包含我想要使用的对象名称的字符串。
答案 3 :(得分:0)
如果JavaScript听起来很有吸引力,请查看Jint,一个用于.NET的JS解释器。 Jint实际上实现了一个JS解释器,而不是编译代码和处理AppDomains。您可以将.NET类中的变量/方法公开给脚本,脚本可以将值返回给C#app。
绝对值得一试。
答案 4 :(得分:0)
使用JScript eval
函数有一种简单的方法:
创建一个JScript源文件JsMath.js:
class JsMath
{
static function Eval(expression : String) : double
{
return eval(expression);
};
}
将其编译为DLL:
> jsc /t:library JsMath.js
,添加对JsMath.dll的引用,并调用JsMath.Eval
方法:
double x = JsMath.Eval("2 + 3 * 4");