【问题标题】:C#, .net, general programming architecture. GetType or Enum : Which is better? [closed]C#、.net、通用编程架构。 GetType 或 Enum :哪个更好? [关闭]
【发布时间】:2013-05-07 17:29:58
【问题描述】:

你觉得哪个更好..

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

或者给对象一个枚举属性

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

【问题讨论】:

    标签: c# .net types enums


    【解决方案1】:

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

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

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

    【讨论】:

    • 这不是对OP问题的回答,当虚拟方法不适用时,有很多有效的情况。
    【解决方案2】:

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

    if (thing is typeof(thisthing))
    

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

    【讨论】:

    • 请注意,这实际上与 OP 的检查不同(尽管这更有可能是更好的选择)。 is 关键字将为子类以及实际类返回 true,其中 OP 的版本要求类型完全匹配。
    • is 也会匹配子类型,而不仅仅是精确类型匹配。
    • 好点,我假设这些类型没有子类
    • 你的意思是thing is thisthing
    【解决方案3】:

    这取决于:

    if (thing.TypeName == NamesEnum.thisthing)
    

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

    但是:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-13
      • 2011-03-19
      • 2011-01-05
      • 2010-11-24
      • 2013-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多