4

你认为哪个更好..

        if (thing.GetType() == typeof(thisthing))
        {
           //do stuff for this type of thing.
        }

或者给对象一个 Enum 属性

        if (thing.TypeName == NamesEnum.thisthing)
        {
           //do stuff for this type of thing.
        }
4

3 回答 3

12

这些都不是特别可扩展或可维护的方法。

通常最好将其直接设计到类型层次结构中的虚拟方法中,然后调用该方法。这允许其他类覆盖并提供适当的自定义功能。

在您的情况下,thisthing类型(ThisThing如果您想遵循 .NET 命名约定,应该命名)将只有一个DoStuff方法,如果需要,它可以是虚拟的,然后调用它。

于 2013-05-13T15:51:20.667 回答
3

如果您正在使用没有子类型的基本类型...您的第一个示例可以很好地缩短为

if (thing is typeof(thisthing))

真的要看情况。如果你有很多不同的类型,你会在某个时候想要一个 switch 语句,所以如果有很多类型,我会说选项 2。

于 2013-05-13T15:52:03.937 回答
3

这取决于:

if (thing.TypeName == NamesEnum.thisthing)

运行起来会更高效GetType(),因为这是 2 个数值的简单比较。

但:

if (thing.GetType() == typeof(thisthing))

更“灵活”:当您进行一些重构、更改类型名称或其他任何事情时,此条件仍然有效。

但是在条件下会失败,如果 2 种类型属于 2 个不同的程序集,而不是在第一种情况下,这仍然会被匹配为相等,因为你不是types而只是枚举值。

总之,没有最好的方法,只有最适合你的需求。

于 2013-05-13T15:53:04.090 回答