转换(int到double)并在运行时对变量进行操作

时间:2016-09-27 03:14:52

标签: c#

我正在创建一个像项目一样的计算器,它需要对变量执行操作+, -, *, /, %, ^。标准操作属于var1 OP var2类型。我在运行时有两个变量的类型,可以是Int64double

我可以将它们都转换为double并进行计算,但是当两个变量都是整数时,我更倾向于进行基于整数的计算(否则将两者都转换为double)。这是我到目前为止(添加)


if (container1.vType == Interop.variableType.DOUBLE || container2.vType == Interop.variableType.DOUBLE)
    return Convert.ToDouble(container1.value) + Convert.ToDouble(container2.value);
return (Int64)container1.value + (Int64)container2.value;

但是,由于多次操作,反复使用相同/相似的代码会产生不必要的冗余(我只需要更改运算符)。

那么我应该如何做到这一点,以便它具有高性能和最小/无冗余?

1 个答案:

答案 0 :(得分:2)

这是另一种方法。它减少了代码重复,但增加了LOC。它肯定比直接调用运算符效率低。这样做的主要好处是可扩展性和模块化,可以长期维护。

class Evaluator {
    Dictionary<string, Func<dynamic, dynamic, dynamic>> BinaryOperatorsDyn = new Dictionary<string, Func<dynamic, dynamic, dynamic>>();

    public Evaluator() {
        LoadOperators();
    }

    void LoadOperators() {
        BinaryOperatorsDyn.Add("+", (x, y) => x + y);
        BinaryOperatorsDyn.Add("-", (x, y) => x - y);
        BinaryOperatorsDyn.Add("*", (x, y) => x * y);
    }

    public void DoDemo() {
        long x = 20;
        double y = 30;
        var oper = "+";

        var result = BinaryOperatorsDyn[oper](x, y);
        Console.WriteLine($"Result of {x} + {y} is {result}. Type of result is {result.GetType().ToString()}");
    }
}
class Program {
    static void Main(string[] args) {
        var eval = new Evaluator();
        eval.DoDemo();
    }
}