1

给定字符串中的动态 if 语句,.net 中是否有一种方法可以评估并返回正确的结果。

IE

    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。从这个角度来看,这似乎是“愚蠢的”,但它适用于需要利用类似语法进行评估的更复杂的引擎。

我是否需要编写某种解析器并评估语句...?

谢谢你的帮助!

4

3 回答 3

3

我认为您正在寻找的是 CSharpCodeProvider :http: //msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx

这允许您从源代码编译或评估 C# 代码并运行它。它可能不像评估单个“if”案例那么容易,因为当您编译 C# 时,您应该拥有完整的语法。

于 2012-10-19T23:35:39.497 回答
3
  • 您可以使用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

于 2012-10-19T23:41:31.650 回答
0

你也可以这样做:

var expression="(\"Alex\" == \"Alex\") ? 1:0"; 
var res = FlexRule.DynamicEvaluation.ExpressionEval.Default.Compute(null, expression);

有关表达式的更多详细信息,请查看 http://wiki.flexrule.com/index.php?title=Expression

于 2014-10-19T22:37:39.880 回答