gpt4 book ai didi

c# - 如何使用 C# 泛型将这 3 种方法变成一种方法?

转载 作者:太空狗 更新时间:2023-10-29 21:03:50 24 4
gpt4 key购买 nike

我使用泛型的次数不多,所以不知道是否可以将以下三种方法变成一种使用泛型的方法来减少重复。实际上,我的代码目前有六种方法,但如果您可以解决这三种方法,那么其余的方法无论如何都应该使用相同的解决方案。

    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");
}
}

我正在构建一个简单的表达式解析器,然后需要评估简单的二元运算,例如加法/减法等。我使用上述方法来获取使用相关类型执行的实际数学运算。但必须有更好的答案!

最佳答案

泛型本身不支持算术。但是,可以使用 .NET 3.5 来完成,like so . Operator 类是 MiscUtil 的一部分.然后这变成:

   public T Evaluate<T>(T x, T y) {
switch (Operation)
{
case BinaryOp.Add:
return Operator.Add(x, y);
case BinaryOp.Subtract:
return Operator.Subtract(x, y);
... etc

由于您正在编写表达式解析器,因此直接使用 Expression 可能是个好主意,但欢迎您使用上述内容。

关于c# - 如何使用 C# 泛型将这 3 种方法变成一种方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/171664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com