c# 用委託 + 策略 解決 switch case 過多的問題

我們經常使用 switch 語句,如果case 不多,當然很好,簡單明了。但有時業務複雜 case 過多,幾十個以上 或者 后續經常有增加等情況的,那用switch case 就各種DANG疼.
以下簡單說下用委託 + 策略 解決這個問題.

        string paraStr = "a"; 
        //重點1,使用策略(约定接口名):傳入的參數與方法名一致 或有規則的聯系,假設傳入參數值為 "a" , 與方法a同名
       
        //以下就是要取代的 switch case
        //switch (paraStr)
        //{
        //    case "a":
        //        a("aaa");
        //        break;
        //    case "b":
        //        b("bbb");                    
        //        break;
        //    case "c":
        //        c("ccc");                  
        //        break;
        //        //
        //        //下面假設還有好多 case,淩亂中 .......
        //}
        
        // 重點2:用委託鏈
        Func<string, string> func = a;
        func += b;
        func += c;
        //如果后續還有增加的方法,,,繼續加入到委託鏈中


        //重點3:用GetInvocationList () ,并反射得到 委託鏈中方法的名稱,,與重點1 傳入參數關聯
        var f = func.GetInvocationList().AsEnumerable().Where(o => o.GetMethodInfo().Name.Contains(paraStr)).FirstOrDefault();//using System.Reflection;
        if (f != null) //如果找到該方法,執行
        {
          Console.WriteLine (f.DynamicInvoke("Get it."));
        }

 public static string a(string str)
        {
            Console.WriteLine("方法a");
            return str + "方法a";
        }
        public static string b(string str)
        {
            Console.WriteLine("方法b");
            return str + "方法b";
        }     
        public static string c(string str)
        {
            Console.WriteLine("方法c");
            return str + "方法c";
        }

對于重點1的策略,也可以使用 Dictionary , enum,hashtablet,利用反射得到方法并執行(https://blog.csdn.net/segclliwf/article/details/116650593?spm=1001.2014.3001.5501)等,維護傳入參數與執行方法的聯系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值