如何使用C#泛型将这3种方法合并为一种?

前端之家收集整理的这篇文章主要介绍了如何使用C#泛型将这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");
        }
    }

我正在构建一个简单的表达式解析器,然后需要评估简单的二进制操作,如加法/减法等.我使用上面的方法来获得使用相关类型执行的实际数学.但必须有一个更好的答案!

解决方法

泛型本身不支持算术.但是,它可以使用.NET 3.5,like so来完成.Arms类是 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#相关文章