类似枚举的类

26 浏览
0 Comments

类似枚举的类

我正在寻找一种在类中创建类似枚举的最佳实践,该类不包含数字值,而是包含字符串值。\n类似于这样的代码:\n

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

\n我希望在整个应用程序中使用这个类作为所有需要CustomerType的情况的值。我不能使用枚举,因为这是一个旧系统,并且这样的值在各个地方都是硬编码的,我只是想将它们集中在一个地方。\n问题是,在上面的示例中,我应该使用以下哪种方式来声明变量:\n

    \n

  1. static read-only关键字
  2. \n

  3. const关键字
  4. \n

  5. 或者只使用static
  6. \n

\n对于设置这些类和值,什么是最佳实践?

0
0 Comments

在使用C#时,为什么不创建一个enum并为enum的值设置基于Description属性的string,如下所示:

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

然后,您可以按照下面的方式获取enum值的Description值:

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

对于获取enumDescription属性值的其他方法,请参考这个SO QA

这种方法太"hacky"了,不够直接,您需要进行额外的类型转换,代码不清晰。您也可以像这样使用Enums.GetDescription((CustomerType)CustomerType.Type1),但如果我可以直接使用string CustomerType.Type1String,那有什么意义呢。无论如何,谢谢,我之前不知道Description属性 🙂

0
0 Comments

在这段内容中,提到了在使用静态字段时可能会出现的问题以及解决方法。问题是当使用普通的静态字段时,可能会不小心修改字段的值,从而导致神秘的故障。因此,推荐的解决方法是使用static readonlyconst

const会导致变量的值在编译时嵌入到调用代码中,这与旧的硬编码代码基本相同(但具有符号常量的优势)。const的危险在于,如果一个const发生了变化,你必须重新编译所有相关的代码,否则可能会出现不同步的常量和棘手的错误。

static readonly将导致正常的字段访问,因此你不会遇到同步问题。然而,由于额外的字段访问,可能会稍微降低性能(尽管在性能关键代码中使用这些字段很可能不会有明显的影响)。如果你认为将来可能需要更改这些字符串,那么建议使用static readonly

从这段内容中可以得出,这些值很少发生变化,因此使用const是一个安全的选择。然而,最终的决定取决于你自己。

0