none
请教c# 有没有处理动态表达式的类? RRS feed

  • 问题

  • 各位大仙:

         想请教一下,C#里有没有处理动态表达式的类,如JAVA的OGNL,就是用来解决动态计算一个表达式的功能。谢谢!

    • 已移动 doukooo 2013年7月16日 5:55 C#相关问题
    2013年5月23日 6:38

全部回复

  • 有,用Lambda构建表达式。

    可以参考Lambda表达式

    下面演示计算(1+2)*3的过程:

    public class MainTest
        {
            static void Main(string[] args)
            {
                //定义三个常量
                ParameterExpression num1 = Expression.Parameter(typeof(int));
                ParameterExpression num2 = Expression.Parameter(typeof(int));
                ParameterExpression num3 = Expression.Parameter(typeof(int));
     
                //定义表达式
                Expression exp = Expression.Add(num1num2);
                Expression allexp = Expression.Multiply(expnum3);
     
                //计算表达式
                LambdaExpression  expression = LambdaExpression.Lambda(allexpnum1num2num3);
     
                //编译并获取结果
                Console.WriteLine(expression.Compile().DynamicInvoke(123));
            }
        }

    If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer

    Help by clicking:
    Click here to donate your rice to the poor
    Click to Donate
    Click to feed Dogs & Cats


    Found any spamming-senders? Please report at: Spam Report

    2013年8月4日 5:10
    版主
  • 您好,
    您也可以參考使用

    Script.NET(S#)

    Roslyn

    使用Script.NET(S#)來做四則運算計算機 

    以下為使用Script.NET(S#)的Example,

    //using Scripting.SSharp;
    //using Scripting.SSharp.Runtime;
    
    RuntimeHost.Initialize();
    const string calculatorOpeations = "return {0};";
    //執行 (5+7) * (9+10) 
    string myExecuteScript = "(5+7) * (9+10)";
    string operations = String.Format(calculatorOpeations, myExecuteScript);  
    Script s = Script.Compile(operations);
    string result = s.Execute().ToString();
    RuntimeHost.CleanUp();
    // (5+7) * (9+10) = 228
    MessageBox.Show(myExecuteScript + " = " + result);


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    • 已编辑 亂馬客 2013年8月4日 8:15 add example
    2013年8月4日 8:05
  • 试试使用Expression类,你可以参考这个文章来理解:http://www.cnblogs.com/zhili/archive/2012/12/12/LambdaExpression.html

    If my post is helpful,please help to vote as helpful, if my post solve your question, please help to make it as answer. My sample

    2013年8月5日 2:50