加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 17:37:27 所属栏目:百科 来源:网络整理
导读:我没有使用泛型,因此无法弄清楚是否可以使用泛型将以下三种方法合并为一种以减少重复.实际上我的代码目前有六种方法,但如果你可以解决这三种方法,那么其余的应该只使用相同的解决方案. private object EvaluateUInt64(UInt64 x,UInt64 y) { switch (Operatio
我没有使用泛型,因此无法弄清楚是否可以使用泛型将以下三种方法合并为一种以减少重复.实际上我的代码目前有六种方法,但如果你可以解决这三种方法,那么其余的应该只使用相同的解决方案.
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可能是个好主意,但欢迎您使用上述内容.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读