本文共 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:用委託鏈 Funcfunc = 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)等,維護傳入參數與執行方法的聯系。