最快速度检查对象的类型

12 浏览
0 Comments

最快速度检查对象的类型

在C#中,检查对象类型的最快方法是什么?

似乎有多种方法可以实现;如is、GetType()、typeof,我想要最快的方法。

我拥有的对象很简单,不用担心继承问题。

以下是它需要工作的伪代码:

if (x == ClassY) 
{
    doYStuff();
    return
}
if (x == ClassZ) 
{
    doZStuff();
    return
}
用其他类类型反复重复...

欢迎提出建议,希望你们都好。

谢谢。

0
0 Comments

最快的检查对象类型的方法是使用is运算符。它可以用来检查对象是否属于某个类或者实现了某个接口。使用is运算符可以避免使用类型转换或者反射来确定对象的类型。例如,如果要检查对象x是否属于ClassY类,可以使用以下代码:

if (x is ClassY) 
{
    doYStuff();
    return;
}

如果要检查对象x是否属于IClassY接口的实现类,可以使用以下代码:

if (x is IClassY) 
{
    doYStuff();
    return;
}

然而,有人认为使用is运算符通常意味着设计上存在问题。因此,建议在文章中提到这一点,并提供替代方案的草图。虽然这种方法可以快速检查对象的类型,但是在设计上应尽量遵循单一职责原则。对于新编写的代码,应尽量遵循单一职责原则,但是对于维护和更新旧应用程序的开发人员来说,这可能不是一个可选项。

0
0 Comments

问题的出现原因是担心性能问题,检查对象的类型通常不是一个好主意。最好的解决方法是将代码编写为从一个共同的基类派生,并在派生类中重写doStuff()方法。这样,你只需要调用x.DoStuff(),而不必担心检查类型。这样做还意味着当需要处理新类型时,你不必不断更改if语句。

然而,如果你打算检查类型,一种简洁整洁的方法是使用switch语句。你可以这样做:

switch(x)
{
    case ClassX classX:
        Console.WriteLine("ClassX");
        break;
    case ClassY classy:
        Console.WriteLine("ClassY");
        break;
}

如果你没有访问ClassX、ClassY等,你可以通过包含或继承它们并将每个doStuff()调用间接指向现有的特定类方法来实现类似的效果。

0