C#类类型的开关

C#类类型的开关,c#,if-statement,switch-statement,typeof,C#,If Statement,Switch Statement,Typeof,我有以下方法,该方法将类的类型作为参数: public void test(Type proType){ } 我目前有一个很大的if-else,看起来像: if(proType == typeof(Class)){} 因为大约有十个,这看起来不整洁 我试着把它换成一个开关,但没能让它工作 为了让switch语句起作用,有没有更好的实践方法 switch (proType) { case typeof(ClassN

我有以下方法,该方法将类的类型作为参数:

public void test(Type proType){

}
我目前有一个很大的
if-else
,看起来像:

if(proType == typeof(Class)){}
因为大约有十个,这看起来不整洁

我试着把它换成一个开关,但没能让它工作

为了让switch语句起作用,有没有更好的实践方法

           switch (proType)
            {
                case typeof(ClassName):
                    break;
            }
“需要一个常量值”

该函数的调用类似于
test(typeof(class))

目标是我有一个大对象,它包含许多小类

typeof(class)switch/if语句允许我决定进入哪个容器来取出对象。

如果您感兴趣的类型在TypeCode枚举中,则可以使用
switch(Type.GetTypeCode(proType))
。例如,从:


你真正想要实现的是什么。我猜10次中有9次,当你切换某个对象的类型时,你的设计是有缺陷的。在大多数情况下,虚拟分派或多态性(或两者)是您真正想要的,但在不知道您试图解决的问题是什么的情况下,我们无法确定。

我通常使用字典为每种类型创建一个动作缓存;如果类型预先已知,则在启动时加载它,或者在失败时使用TryGetValue并进行填充。

那么,让您正在测试的所有对象共享一个公共接口如何

 interface ITestable
 {
     void DoSomething();
 }
每个对象都以不同的方式实现此接口:

 class MySomething : ITestable
 {
     public void DoSomething()
     {
         //type specific implementation
     }
 }

 class MyOtherSomething : ITestable
 {
     public void DoSomething()
     {
         //type specific implementation
     }
 }
现在:


你所有的切换逻辑都消失了。塔达

把你的代码放在这里,这可能是件愚蠢的事情,一个开关应该可以毫无问题地工作方法
test(Type proType)
的目的是什么?它叫什么名字?您是否正在进行类似于
测试(typeof(someObj))
?将每种情况下的代码封装在您正在测试的每种类型的已知接口方法中如何?可能应该寻找一种通用解决方案开关对类型为的对象不起作用-“预期的整数类型”错误打开类型通常是坏设计的一个好迹象。面向对象的语言通常提供更好的方法。更新的问题有更多的细节,这正是
开关
语句所做的。这两种解决方案几乎完全相同。
 class MySomething : ITestable
 {
     public void DoSomething()
     {
         //type specific implementation
     }
 }

 class MyOtherSomething : ITestable
 {
     public void DoSomething()
     {
         //type specific implementation
     }
 }
 foreach(ITestable testable in myTestablesList)
 {
     testable.DoSomething();
 }