您认为哪个更好..
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.
}
答案 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
而只是枚举值。
简而言之,没有最佳方法,只需最合适满足您的需求。