string s = "+";
                    int num1 = Convert.ToInt32(stack.Pop());
                    int num2 = Convert.ToInt32(stack.Pop());
                    if (s.Equals("+"))
                    {
                        int num = num2 + num1;
                        stack.Push(num);
                    }
                    else if (s.Equals("-"))
                    {
                        int num = num2 - num1;
                        stack.Push(num);
                    }
                    else if (s.Equals("*"))
                    {
                        int num = num2 * num1;
                        stack.Push(num);
                    }
                    else if (s.Equals("/"))
                    {
                        int num = num2 / num1;
                        stack.Push(num);
                    }
我有一个字符串string s = "+";能不能让他直接作为操作符,而不用判断那么多

解决方案 »

  1.   

    最简单的就是调用DataTable.Compute方法,效率不会有你这样判断高。
    还可以引用JScprpt,里面有Eval类可以直接对字符串求值。其实你就是觉得这样判断代码写起来麻烦嘛(效率其实不低,if语句比调用一个庞大的操作类,速度快),那你可以包装一个函数反复使用,参数就3个,2个要计算的值,一个操作符(字符串),函数内判断,这样就不麻烦了,重复利用。
      

  2.   

    这个其实是文法解析的里面token定义定义token有很多种方式像楼主这样简单的语法树的话,用不上那么多复杂结构,所以可以简单用字典类和委托去搞字典<string,func<op1,op2,res>>
      

  3.   

    有关这块内容,其实codeproject,codeplex上有很多代码例子和开源项目滴关键词"math parse",在这两个站用这词一搜可以搜一堆
      

  4.   

    public int isAdd(string s)
    {
        int num1 = Convert.ToInt32(stack.Pop());
        int num2 = Convert.ToInt32(stack.Pop());
        if(s=="+")
        int num=num1+num2;
        return stack.Push(num);
    ...........