类似Enum的课程

And*_*ija 10 .net c# string const static-members

我正在寻找一个关于如何创建类似枚举类的最佳实践,而不是数字包含字符串值.像这样的东西:

public static class CustomerType
{
  public static string Type1 = "Customer Type 1";
  public static string Type2 = "Customer Type 2";
}
Run Code Online (Sandbox Code Playgroud)

我会在整个应用程序中使用此类作为我需要CustomerType的所有情况的值.我不能使用Enum,因为这是遗留系统,这样的值在任何地方都是硬编码的,我只是想把它们集中在一个地方.

在上面的示例中,问题是我应该用于声明变量:

  1. 静态只读关键字
  2. const关键字
  3. 或者只是静态的

设置这些类和值的最佳做法是什么?

nne*_*neo 13

你应该使用纯static因为字段可以为无意中修改而导致破损神秘.因此,你的两个选择是static readonlyconst.

const将导致变量的值在编译时嵌入到调用代码中,这有效地等同于旧的硬编码代码(但具有符号常量的优点).危险const在于,如果const更改,您必须重新编译所有内容,以免最终导致不同步的常量和棘手的错误.

static readonly将导致正常的字段访问,因此您不会遇到同步问题.但是,由于额外的字段访问,您可能会受到轻微的性能影响(尽管除非您在性能关键代码中大量使用这些字段,否则它可能不会引起注意).如果您认为将来某个时候必须更改字符串,则需要使用static readonly.

从它的声音来看,价值观将很少变化,这const是一个安全的赌注.但是,最终决定取决于您.