C#,. net,通用编程架构。 GetType或Enum:哪个更好?

时间:2013-05-13 15:49:24

标签: c# .net types enums

您认为哪个更好..

        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.
        }

3 个答案:

答案 0 :(得分:12)

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

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

在您的情况下,thisthing类型(如果您想遵循.NET命名约定,应该命名为ThisThing)只有DoStuff方法,如果需要可以是虚拟的,并称之为。

答案 1 :(得分:3)

IF 您使用的是没有子类型的基本类型... 你的第一个例子可以很好地缩短到

if (thing is typeof(thisthing))

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

答案 2 :(得分:3)

取决于:

if (thing.TypeName == NamesEnum.thisthing)

将运行更高性能,然后GetType(),这是2个数值的简单比较。

但是:

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

更“灵活”:当你进行一些重构,更改类型名称或其他什么时,这种情况仍然有效。

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

简而言之,没有最佳方法,只需最合适满足您的需求。