首页 > 解决方案 > 使用相同的变量名或空检查切换对象类型失败?

问题描述

所以我们可以在 switch 语句上做一个 fallthrough,我们可以在 object 类型上做 switch 语句,但是有没有办法对 object 类型做一个 fallthrough,这样我们就可以说“如果是这些类型的对象中的任何一个,调用这个方法,通过在对象中,我会在那里处理它”?

通常情况下,每个 case 语句必须有一个唯一的变量名,因此使用相同的变量名似乎不适合这里,但如果我可以基于as强制转换进行空值检查,那将起作用,所以我知道要发送哪个。

例如:

switch (myObject){
    ... //other cases
    case MyObjectType1 myObjectType1 :
    case MyObjectType2 myObjectType2 :
    case MyObjectType3 myObjectType3 :
    case MyObjectType4 myObjectType4 :
            var objectEvent = myObjectType1; //error here
            ///some other magic here
            HandleMyObjectTypes(myObjectType);
                    break;
}    

我遇到的问题是Use of unassigned local variable 'myObjectType1',我什至不能as为空检查进行强制转换,这样我就可以抓住它真正的样子,这样我就可以将它交给我对那些特定类型的处理方法。这里的困难是我不能重构整个当前的方法来支持这种模式方法。

我确定我缺少一些简单的模式或概念,但它是什么?

编辑:我想做的是:

switch (myObject){
    ... //other cases
    case MyObjectType1 myObjectType1 :
    case MyObjectType2 myObjectType2 :
    case MyObjectType3 myObjectType3 :
    case MyObjectType4 myObjectType4 :
            var objectEvent = myObjectType1 ?? myObjectType2;
            objectEvent = objectEvent ?? myObjectType3;
            objectEvent = objectEvent ?? myObjectType4;

            HandleMyObjectTypes(objectEvent);
                    break;
}    

标签: c#castingswitch-statementfall-through

解决方案


推荐阅读