c#, .net,通用编程体系结构.GetType或Enum:哪个更好

本文关键字:Enum 更好 体系结构 net 编程 GetType | 更新日期: 2023-09-27 18:13:16

你认为哪个更好……

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

c#, .net,通用编程体系结构.GetType或Enum:哪个更好

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

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

在你的例子中,thisthing类型(如果你想遵循。net的命名约定,它应该被命名为ThisThing)将只有一个DoStuff方法,如果需要,它可以是虚拟的,并调用它。

这取决于:

if (thing.TypeName == NamesEnum.thisthing)

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

但:

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

更加"灵活":当你做一些重构,改变类型名称或其他什么,这个条件仍然有效。

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

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

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

if (thing is typeof(thisthing))

看情况而定。如果你有很多不同的类型,你会需要一个switch语句,所以如果有很多类型,我会选择选项2。