枚举vs字符串常量C#

时间:2018-11-24 03:02:56

标签: c# design-patterns

所以我最近读了一本专门关于依赖注入的书。在这本书的某处,它指出枚举是一种代码味道。...

我想获得SO'ers的普遍共识。我需要设计一个带有一些核心核心类的相当大的应用程序,并在以某种方式寻求SO同事在这种情况下会使用的设计原则方面寻求帮助,然后再致力于一种方法或另一种方法,这使得以后很难更改。

public enum Foo
{
  LovelyFoo,
  TerribleFoo
}

OR

使用带有Contants的静态类

public static class Foo
{
    public const string LovelyFoo = nameof(LovelyFoo); //or "Lovely Foo";
    public const string TerribleFoo = nameof(TerribleFoo); // or "Terrible Foo";
}

然后当然可以在需要时使用它

Foo MyFoo = Foo.LovelyFoo;

OR

string MyFoo = Foo.LovelyFoo;

1 个答案:

答案 0 :(得分:1)

  1. 仅仅因为某些东西会被滥用并不意味着它不好用。

  2. 您没有给出实际的用例,而只是foo示例,很难分辨出这种气味。

  3. 枚举适用于紧密绑定的事物集,例如一周中的几天。

    • switch语句是否有合法用途
    • 集合不变且根深蒂固的地方。
    • 枚举在哪里(我知道这是循环的)

让常量为常量,让枚举为枚举。但是,如果您发现自己想要使用大量的枚举和开关,那么对于泛型或多态性来说,这可能就大声疾呼了。仅仅因为它们看起来整洁,打字和精彩并不意味着您的代码应该充满了它们。

最后,在您的用例上运行Microsoft测试。就是说,Microsoft会怎么做,在BCL中您看到此示例的地方是常见的,Microsoft是否会像这样使用它们。尽管这不是节省的恩典,但是如果您发现自己的写作是不可预测的怪异而奇妙的结构,并且没有其他人看到过,那么您可能正在做错事