有没有更好的方法在c#中转换对象以避免重复的IsType Get AsType模式?

时间:2014-08-29 16:03:31

标签: c# casting code-cleanup

我们有很多这样的代码

 if(object is ConcreteType))
{
object = object as ConcreteType;
}
else if(object as ConcreteType2))
{
object = object as ConcreteType2;
}

有没有更好的方法来编写这种代码以避免重复?

2 个答案:

答案 0 :(得分:3)

是的,

IMyInterface myInterface = (IMyInterface) object;
//...
myInterace.DoTheWork1WhichWasDifferentInTheSpecificObjects();
myInterace.DoTheWork2WhichWasDifferentInTheSpecificObjects();
//...

答案 1 :(得分:0)

修改: 忽略我的回答。它有缺陷。使用Andrej关于接口的答案。您也可以使用继承的类,但是您不需要使用??运算符的丑陋行。

我想我的咖啡还不够。

以下原始答案

如果它们如此形成对象层次结构:

    class A
    {

    }

    class B : A
    {

    }

    class C : B
    {

    }

您可以这样做:

A y = new C();
var x = y as C ?? y as B ?? y as A;

这将获得最具体的课程。如果您需要根据类型采取不同的操作,那么您应该在A中有一个虚拟方法,在其他两个中被覆盖。

如果我对你所做的事情的假设是错误的,那么你应该重新思考你的架构。