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

有在论坛看见一帖,《C#用什么方法可以减少或不使用switch
C#用什么方法可以减少或不使用switch

 

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

工厂接口:

C#用什么方法可以减少或不使用switch 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工厂类:

C#用什么方法可以减少或不使用switch 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类:

C#用什么方法可以减少或不使用switch 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类:

C#用什么方法可以减少或不使用switch 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";

        }

    }

}


因此你的代码最终变为:

C#用什么方法可以减少或不使用switch 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的应用):

C#用什么方法可以减少或不使用switch Reflection
IGetFactory get = (IGetFactory)Assembly.Load("App_Code").CreateInstance("Insus.NET." + mothedName + "Factory");


如果在非asp.net下,可以把"App_Code"改为"程序集名称":

C#用什么方法可以减少或不使用switch View Code
IGetFactory get = (IGetFactory)Assembly.Load("程序集名称").CreateInstance("Insus.NET." + mothedName + "Factory");

 

 

你可能感兴趣的:(switch)