有没有更好的方法在c#中强制转换对象,以避免重复的IsType Get-AsType模式
本文关键字:IsType 模式 Get-AsType 转换 方法 更好 有没有 对象 | 更新日期: 2023-09-27 18:19:57
我们有很多这种代码
if(object is ConcreteType))
{
object = object as ConcreteType;
}
else if(object as ConcreteType2))
{
object = object as ConcreteType2;
}
有没有更好的方法来编写这种代码以避免重复?
是,
IMyInterface myInterface = (IMyInterface) object;
//...
myInterace.DoTheWork1WhichWasDifferentInTheSpecificObjects();
myInterace.DoTheWork2WhichWasDifferentInTheSpecificObjects();
//...
编辑:忽略我的回答。它是有缺陷的。使用下面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中有一个虚拟方法,该方法在其他两个方法中被重写。
如果我对你正在做的事情的假设是错误的,那么你应该重新思考你的架构。