如何在此示例方法中使用(Switch)代替(IF& Else)

时间:2011-12-04 04:41:06

标签: c# types if-statement switch-statement

我有很多if and else的方法。我如何通过Switch转换它?

protected override IRepository<T> CreateRepository<T>()
{
   if (typeof(T).Equals(typeof(Person)))
      return new PersonRepositoryNh(this, SessionInstance) as IRepository<T>;
   else if (typeof(T).Equals(typeof(Organization)))
      return new OrganizationRepositoryNh(this, SessionInstance) as IRepository<T>;
   else
      return new RepositoryNh<T>(SessionInstance);
}

4 个答案:

答案 0 :(得分:2)

您不能对类型Type使用switch语句。您只能使用带有bool,char,string,integral和enum的开关,或者它们的可空版本。

根据编译器:

  

switch表达式或case标签必须是bool,char,string,   积分,枚举或相应的可空类型

答案 1 :(得分:2)

你做不到。 case的{​​{1}}语句必须是编译时常量,类型为sbyte,byte,short,ushort,int,uint,long,ulong,char,string或enum-type(包括隐式转换),这不是你对switch个对象所拥有的。

什么是合法的:

Type

什么是不合法的:

switch (foo)
{
    case 42:
       // code
       break;
}

答案 2 :(得分:2)

根据specification,只有sbyte,byte,short,ushort,int,uint,long,ulong,char,string或enum-types可以在switch语句中使用,所以基本上你不能打开type对象。

现在,您可以做的是打开类型的Name,这只是string,可以打开它。

答案 3 :(得分:1)

  1. 你确定要这样做吗?为什么不使用对象层次结构和虚函数?

  2. 此代码有效

  3. public static void CreateTest<T>()
    {
        switch (typeof(T).Name)
        {
            case "Int32": System.Console.WriteLine("int");
                break;
            case "String": System.Console.WriteLine("string");
                break;
    
        }
    
    }
    
    static void Main(string[] args)
    {
        CreateTest<int>();
        CreateTest<string>();
        CreateTest<double>();
    
    }