在运行时转换(int到double)并对变量进行操作
本文关键字:变量 操作 double 转换 运行时 int | 更新日期: 2023-09-27 18:08:52
我正在创建一个类似计算器的项目,需要对变量执行操作+, -, *, /, %, ^
。标准操作类型为var1 OP var2
。我有两个变量在运行时的类型,可以是Int64
或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;
然而,由于多个操作,反复使用相同/相似的代码将产生不必要的冗余(我只需要更改操作符)。
那么我应该如何做到这一点,使它具有高性能和最小/没有冗余?
这是另一种方法。它减少了代码重复,但增加了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();
}
}