给定String中的动态if语句,.net中有一个方法来评估并返回正确的结果。
即
static void Main(string[] args)
{
String a = "if(\"Alex\" == \"Alex\"){return 1;}else{return 0;}";
passThroughTest.Program.evalStatement(a);
}
public static void evalStatement(String statement)
{
//Evaluation of Statement
}
这并不完美,但在这种情况下,最终结果将是1.从这个角度来看,这似乎是“愚蠢的”,但它适用于需要利用类似语法进行评估的更复杂的引擎。
我是否需要编写某种解析器并评估语句......?
感谢您的帮助!
答案 0 :(得分:2)
我认为您正在寻找的是CSharpCodeProvider:http://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx
这允许您从源代码编译或评估C#代码并运行它。它可能不像评估单个“if”情况那么容易,因为在编译C#时,您需要使用整个语法。
答案 1 :(得分:1)
您可以使用javascript.net
来自其网站的示例代码:
// Initialize a context
using (JavascriptContext context = new JavascriptContext()) {
// Setting external parameters for the context
context.SetParameter("console", new SystemConsole());
context.SetParameter("message", "Hello World !");
context.SetParameter("number", 1);
// Script
string script = @"
var i;
for (i = 0; i < 5; i++)
console.Print(message + ' (' + i + ')');
number += i;
";
// Running the script
context.Run(script);
// Getting a parameter
Console.WriteLine("number: " + context.GetParameter("number"));
}
或使用C#表达式树,请参阅Building Expression Evaluator with Expression Trees
答案 2 :(得分:0)
您也可以这样做:
var expression="(\"Alex\" == \"Alex\") ? 1:0";
var res = FlexRule.DynamicEvaluation.ExpressionEval.Default.Compute(null, expression);
有关表达的更多详细信息,请查看 http://wiki.flexrule.com/index.php?title=Expression