博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c# 用委託 + 策略 解決 switch case 過多的問題
阅读量:4041 次
发布时间:2019-05-24

本文共 1634 字,大约阅读时间需要 5 分钟。

我們經常使用 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
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)等,維護傳入參數與執行方法的聯系。

你可能感兴趣的文章
[互联网关注]李开复教大学生回答如何学好编程
查看>>
[关注大学生]李开复给中国计算机系大学生的7点建议
查看>>
[关注大学生]大学毕业生择业:是当"鸡头"还是"凤尾"?
查看>>
[茶余饭后]10大毕业生必听得歌曲
查看>>
gdb调试命令的三种调试方式和简单命令介绍
查看>>
C++程序员的几种境界
查看>>
VC++ MFC SQL ADO数据库访问技术使用的基本步骤及方法
查看>>
VUE-Vue.js之$refs,父组件访问、修改子组件中 的数据
查看>>
Vue-子组件改变父级组件的信息
查看>>
Python自动化之pytest常用插件
查看>>
Python自动化之pytest框架使用详解
查看>>
【正则表达式】以个人的理解帮助大家认识正则表达式
查看>>
性能调优之iostat命令详解
查看>>
性能调优之iftop命令详解
查看>>
非关系型数据库(nosql)介绍
查看>>
移动端自动化测试-Windows-Android-Appium环境搭建
查看>>
Xpath使用方法
查看>>
移动端自动化测试-Mac-IOS-Appium环境搭建
查看>>
Selenium之前世今生
查看>>
Selenium-WebDriverApi接口详解
查看>>