ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C# 消灭switch的面向映射编程

2022-09-12 10:30:23  阅读:188  来源: 互联网

标签:map return 映射 Num2 C# double switch public Num1


原有switch写法,所有分支集中在一个方法中,使得方法过于冗长

    class Calculator01
    {
        public double Num1 { get; set; }
        public double Num2 { get; set; }

        public double Run(string operate)
        {
            switch(operate)
            {
                case "+":
                    return Num1 + Num2;
                case "-":
                    return Num1 - Num2;
                case "*":
                    return Num1 * Num2;
                case "/":
                    if (Num2 == 0)
                    {
                        throw new Exception("除数不能为0");
                    }

                    return Num1 / Num2;
                default:
                    throw new Exception("未知的操作符");
            }
        }
    }

面向映射写法,将分支剥离为独立方法,避免主要方法过于冗长

    class Calculator02
    {
        // 内置委托Action、Func、Predicate的区别:
        // Action可以有多个参数但不可有返回值;
        // Func可以有多个参数且最后一个参数固定是返回值;
        // Predicate只能有1个参数且返回布尔值。  
        private Dictionary<string, Func<double, double, double>> map = new Dictionary<string, Func<double, double, double>>();

        public double Num1 { get; set; }
        public double Num2 { get; set; }        

        public Calculator02()
        {          
            // 注册操作符到方法的映射
            map.Add("+", Add);
            map.Add("-", Sub);
            map.Add("*", Mul);
            map.Add("/", Div);
        }

        public double Run(string operate)
        {
            if (!map.ContainsKey(operate))
                throw new Exception("未知的操作符");

            return map[operate](Num1, Num2);
        }

        private double Add(double num1, double num2)
        {
            return Num1 + Num2;
        }

        private double Sub(double num1, double num2)
        {
            return Num1 - Num2;
        }

        private double Mul(double num1, double num2)
        {
            return Num1 * Num2;
        }

        private double Div(double num1, double num2)
        {
            if (Num2 == 0)
            {
                throw new Exception("除数不能为0");
            }

            return Num1 / Num2;
        }
    }

 

标签:map,return,映射,Num2,C#,double,switch,public,Num1
来源: https://www.cnblogs.com/lgyup/p/16685623.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有