关于c#:类似Enum的类

Enum-like class

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

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

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

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

  • 静态只读关键字
  • const关键字
  • 或者只是静态的
  • 设置这些类和值的最佳实践是什么?


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

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

    static readonly将导致正常的字段访问,因此不会出现同步问题。但是,由于额外的字段访问,可能会对性能造成轻微的影响(尽管除非在性能关键代码中大量使用这些字段,否则很可能不明显)。如果您认为将来某个时候必须更改字符串,则需要使用static readonly

    从它的声音来看,价值变化很少,以至于const是一个安全的赌注。然而,最终的决定取决于你。


    如果您使用c_,为什么不创建枚举并为enum值设置基于stringDescriptionattribute,如下所示:

    1
    2
    3
    4
    5
    6
    7
    8
    public enum CustomerType
    {
        [System.ComponentModel.Description("Customer Type 1")]
        Type1,

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

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

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

    对于获取枚举的Description属性值的各种其他方法,请参考此so qa