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# コードをコンパイルまたは評価して実行できます。C# をコンパイルすると、構文全体が含まれていることが期待されるため、単一の "if" ケースを評価するほど簡単ではない場合があります。

于 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# 式ツリーを使用します。「式ツリーを使用した式エバリュエーターの構築」を参照してください。

于 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 に答える