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

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