我们有很多这样的代码
if(object is ConcreteType))
{
object = object as ConcreteType;
}
else if(object as ConcreteType2))
{
object = object as ConcreteType2;
}
有没有更好的方法来编写这种代码以避免重复?
答案 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中有一个虚拟方法,在其他两个中被覆盖。
如果我对你所做的事情的假设是错误的,那么你应该重新思考你的架构。