10

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

public static class CustomerType
{
  public static string Type1 = "Customer Type 1";
  public static string Type2 = "Customer Type 2";
}

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

问题是,在上面的例子中,我应该使用声明一个变量:

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

设置这些类和值的最佳实践是什么?

4

2 回答 2

13

你不应该使用plain static,因为这些字段可能会被无意修改并导致神秘的破坏。因此,您的两个选择是static readonlyconst

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

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

从它的声音来看,价值很少会改变,这const是一个安全的赌注。但是,最终决定权在您。

于 2013-02-19T07:07:03.113 回答
3

如果您使用的是 C#,为什么不创建一个枚举并string根据Description attribute以下enum值进行设置:

public enum CustomerType
{
    [System.ComponentModel.Description("Customer Type 1")]
    Type1,

    [System.ComponentModelDescription("Customer Type 2")]
    Type2
}

然后,您可以获得Description枚举值的值,如下所示:

int value = CustermType.Type1;
string type1Description = Enums.GetDescription((CustomerType)value);

有关获取枚举属性值的各种Description其他方法,请参阅此SO QA

于 2013-02-19T07:22:51.143 回答