当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何使用C#泛型将这3种方法合并为一种?》经验,为你挑选了1个好方法。

我没有使用泛型,因此无法弄清楚是否可以使用泛型将以下三种方法合并为一种以减少重复.实际上我的代码目前有六种方法,但如果你可以解决这三种方法,那么其余的应该只使用相同的解决方案.

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

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



1> Marc Gravell..:

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

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

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

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有