有没有更好的方法在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;
}

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

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

是,

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中有一个虚拟方法,该方法在其他两个方法中被重写。

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