枚举vs字符串常量c#

问题描述 投票:0回答:1

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

我希望得到SO'ers的普遍共识。我需要设计一个具有一些中心核心类的相当大的应用程序,并且我正在寻求设计原则的帮助,这些设计原则是SO'ers在这种情况下会使用的,然后再以某种方式让自己变得非常难以在之后进行更改。

public enum Foo
{
  LovelyFoo,
  TerribleFoo
}

要么

使用带有常量的静态类

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;

要么

string MyFoo = Foo.LovelyFoo;
c# design-patterns
1个回答
1
投票
  1. 仅仅因为可以滥用某些东西并不意味着它的使用不好。
  2. 你没有提供真实的用例,只是foo的例子很难分辨这是否有异味。
  3. 枚举适用于紧密绑定的事物,例如一周中的几天。 是否合法使用switch语句 集合不会改变并且根深蒂固。 在哪里(这是我知道的循环)枚举是有意义的

让常量成为常量,让枚举成为枚举。但是如果你发现自己想要使用大量的枚举和开关,那么这可能是因为泛型或多态性而烦恼。只是因为它们看起来整洁,打字和精彩并不意味着你的代码应该充满它们。

最后,针对您的用例运行Microsoft测试。那就是说,微软会做什么,你在BCL看到这个例子的地方,这是常见的,微软是否会像这样使用它们。虽然这不是一种拯救的恩典,但如果你发现自己编写的奇怪而美妙的结构是不可预测的而且没有其他人看过,那么你可能做错了什么

© www.soinside.com 2019 - 2024. All rights reserved.