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

本文关键字:变量 操作 double 转换 运行时 int | 更新日期: 2023-09-27 18:08:52

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

我可以将它们都转换为双精度变量并执行计算,但是当两个变量都是整数时,我更喜欢进行基于整数的计算(否则将它们都转换为双精度变量)。这是我目前得到的(加法)


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;

然而,由于多个操作,反复使用相同/相似的代码将产生不必要的冗余(我只需要更改操作符)。

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

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

这是另一种方法。它减少了代码重复,但增加了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();
    }
}