私はジェネリックをあまり使用していないので、重複を減らすためにジェネリックを使用して次の3つの方法を1つに変えることができるかどうかわかりません。実際、私のコードには現在6つのメソッドがありますが、3つで解決できれば、残りは同じソリューションで機能するはずです。
private object EvaluateUInt64(UInt64 x, UInt64 y)
{
switch (Operation)
{
case BinaryOp.Add:
return x + y;
case BinaryOp.Subtract:
return x - y;
case BinaryOp.Multiply:
return x * y;
case BinaryOp.Divide:
return x / y;
case BinaryOp.Remainder:
return x % y;
default:
throw new ApplicationException("error");
}
}
private object EvaluateFloat(float x, float y)
{
switch(Operation)
{
case BinaryOp.Add:
return x + y;
case BinaryOp.Subtract:
return x - y;
case BinaryOp.Multiply:
return x * y;
case BinaryOp.Divide:
return x / y;
case BinaryOp.Remainder:
return x % y;
default:
throw new ApplicationException("error");
}
}
private object EvaluateDouble(double x, double y)
{
switch (Operation)
{
case BinaryOp.Add:
return x + y;
case BinaryOp.Subtract:
return x - y;
case BinaryOp.Multiply:
return x * y;
case BinaryOp.Divide:
return x / y;
case BinaryOp.Remainder:
return x % y;
default:
throw new ApplicationException("error");
}
}
単純な式パーサーを作成しています。このパーサーは、加算/減算などの単純な2項演算を評価する必要があります。上記のメソッドを使用して、関連する型を使用して実際の計算を実行します。しかし、もっと良い答えがなければなりません!