有在論壇看見一帖,《C#用什么方法可以減少或不使用switch》
Insus.NET的解決方法,是使用工廠方法來處理,可以創建一個工廠接口,然后每個方法設計為一個工廠類,並實現工廠接口。
工廠接口:

using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <summary> /// Summary description for IGetFactory /// </summary> namespace Insus.NET { public interface IGetFactory { string GetResult(); } }
Get工廠類:

using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <summary> /// Summary description for GetFactory /// </summary> namespace Insus.NET { public class GetFactory : IGetFactory { public GetFactory() { // // TODO: Add constructor logic here // } public string GetResult() { return "get"; } } }
GetTest類:

using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <summary> /// Summary description for GetTestFactory /// </summary> namespace Insus.NET { public class GetTestFactory : IGetFactory { public GetTestFactory() { // // TODO: Add constructor logic here // } public string GetResult() { return "gettest"; } } }
以及GetSet類:

using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <summary> /// Summary description for GetSetFactory /// </summary> namespace Insus.NET { public class GetSetFactory : IGetFactory { public GetSetFactory() { // // TODO: Add constructor logic here // } public string GetResult() { return "getset"; } } }
因此你的代碼最終變為:

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Insus.NET; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } public string Exec(string mothedName) { string ret = ""; //switch (mothedName) //{ // case "get": // ret = get(); // break; // case "get1": // ret = gettest(); // break; // //..... // case "testget": // ret = getrset(); // break; //} IGetFactory get = new GetTestFactory(); //這里是實現工廠類 ret = get.GetResult(); return ret; } //public string get() //{ // return "get"; //} //public string gettest() //{ // return "gettest"; //} //public string getrset() //{ // return "getset"; //} }
15:50修改補充如下:
上面的最終代碼,無傳入參數mothedName,怎樣辦,我們可以慮一下反射,如果改為反射擊,那傳入的參數需要規范一下方可以:
"get" >>"Get";
"get1" >>"GetTest"
"testget" >> "GetSet"
這樣一改之后,就可以使用反射語法了,可以把
IGetFactory get = new GetTestFactory(); //這里是實現工廠類
改為(下面是asp.net的應用):

IGetFactory get = (IGetFactory)Assembly.Load("App_Code").CreateInstance("Insus.NET." + mothedName + "Factory");
如果在非asp.net下,可以把"App_Code"改為"程序集名稱":

IGetFactory get = (IGetFactory)Assembly.Load("程序集名稱").CreateInstance("Insus.NET." + mothedName + "Factory");