C#可以减少或不使用switch有什么方法

时间:2022-06-18 06:07:14

Insus.NET的解决方法,是使用工厂方法来处理,可以创建一个工厂接口,然后每个方法设计为一个工厂类,并实现工厂接口。 
工厂接口: 

复制代码代码如下:


IGetFactory 
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工厂类: 

复制代码代码如下:


GetFactory 
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类: 

复制代码代码如下:


GetTestFactory 
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类: 

复制代码代码如下:


GetSetFactory 
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"; 



因此你的代码最终变为: 

复制代码代码如下:


View Code 
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");