如何在C#中将实例变量视为另一种类型的实例

Ben*_*Ben 2 c# polymorphism inheritance

我有一个简单的继承heirarchy MyType2继承自MyType1.

我有一个实例MyType1,arg作为方法的参数传入.如果arg是一个实例MyType2,那么我想执行一些逻辑,转换实例.我的代码看起来像下面的代码.

必须创建一个新的局部变量b感觉不够优雅 - 有没有一种方法可以实现相同的行为,而无需额外的局部变量?

public MyType1 MyMethod(MyType1 arg) 
{
    if(arg is MyType2)
    {
        MyType2 b = arg as MyType2;
        //use b (which modifies "arg" as "b" is a reference to it)...
    }

    return arg;
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 5

注意"是"和"as"是重复测试; 要么使用is然后(一旦你知道)只是演员 - 或者as首先使用并测试null.

你的问题; 如果你只想做一件事 - 然后施放:

if(arg is MyType2)
{
    ((MyType2)arg).SomeSpecialMethod();
}
Run Code Online (Sandbox Code Playgroud)

否则 - 也许是一个virtual方法(在基类型上),或者只是将逻辑重构为另一个方法,所以你有:

if(arg is MyType2)
{
    StuffThatTakesType2((MyType2)arg);
}
Run Code Online (Sandbox Code Playgroud)

但是persoanlly,我只是使用额外的变量:

MyType2 whatever = arg as MyType2;
if(whatever != null) {
    whatever.Foo = 123;
    whatever.Bar();
}
Run Code Online (Sandbox Code Playgroud)