当系统功能增加时,有的时候需要用到Switch Case去判断执行方法,当功能越来越多的时候这种方法就会显得臃肿,最优的做法应该是通过表驱动取代Switch Case,下面的代码定义了用户处理的枚举,以及用户执行的相关操作。
我们通过把方法名放到string[] 数组中,当调用的时候通过反射获取方法并执行,代码如下:
using System; public class Program { static void Main(string[] args) { Console.WriteLine("Please input th user name:"); var userName=Console.ReadLine(); UserActionProcessor ap = new UserActionProcessor(); //Reflection:Get the name of method; var method = typeof(UserActionProcessor).GetMethod(GetUserActionFromTable(UserAction.LoginInSystem)); method.Invoke(ap,new object[]{userName}); Console.ReadLine(); } //Table Drive Replace the Switch static string GetUserActionFromTable(UserAction userAction) { string[] actionArray=new string[]{"Login","OpenIE","OpenChrome"}; return actionArray[(int)userAction]; } //User Action Enum enum UserAction { LoginInSystem, OpenIEBrowser, OpenChromeBrowser } } public class UserActionProcessor { public void OpenIE(string userName) { //Process ... Console.WriteLine(string.Format("{0} open IE!",userName)); } public void OpenChrome(string userName) { //Process... Console.WriteLine(string.Format("{0} open Chrome!",userName)); } public void Login(string userName) { //Process... Console.WriteLine(string.Format("{0} Login Success!",userName));; } }