【发布时间】:2020-07-01 12:39:22
【问题描述】:
在 C# 中检查对象类型的最快方法是什么?
似乎有很多方法可以做到这一点;因为,是,GetType(),typeof,我想要最快的。 我拥有的对象很简单,无需担心继承。
这是它需要如何工作的伪代码:
if (x == ClassY)
{
doYStuff();
return
}
if (x == ClassZ)
{
doZStuff();
return
}
Repeat a lot with other Class types...
欢迎提出建议,希望你们一切都好。
谢谢。
【问题讨论】:
-
我的建议是 (1) 编写基准测试并 (2) 访问 google。--顺便说一句,代码有异味。这样的选择通常应该通过多态性(通过不同的接口实现)来做出。
-
谢谢彼得。所有好的建议。可悲的是,我的谷歌搜索不是确定的。而且我猜其他人会知道答案,所以编写自己的基准测试似乎有点傻。我同意气味,它看起来不漂亮。但这是我必须处理的。塔。
-
所以你不能改变类层次结构?我的意思是,改变 ClassX 和 ClassY 的定义?顺便说一句,即使不是:使用 doStuff() 方法创建一个单独的接口并提供您自己的实现类,这些实现类包含(或可能继承)ClassX、Y、Z,在它们的调用
doX,Y,ZStuff()实现doStuff,然后传递具有接口类型的xs,并简单地调用doStuff(),无需任何if或switch。 -
请注意,有很多旧帖子都在问同样的问题,例如Fastest Type Comparison? 或 What is the fastest way to check a type?。但是,我找不到一个对所有可能的方法都进行彻底基准测试的方法。如果我没有错过任何一个并且这篇文章得到了完整的答案,那么有足够权限的人应该考虑关闭其中一些重复项。
标签: c#