动态C#公式评估

时间:2012-10-19 23:32:39

标签: c# .net

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

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

感谢您的帮助!

3 个答案:

答案 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