我有很多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);
}
答案 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)
你确定要这样做吗?为什么不使用对象层次结构和虚函数?
此代码有效
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>(); }