类似枚举的类
类似枚举的类
我正在寻找一种在类中创建类似枚举的最佳实践,该类不包含数字值,而是包含字符串值。\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
- static read-only关键字
- const关键字
- 或者只使用static
\n
\n
\n
\n对于设置这些类和值,什么是最佳实践?
在使用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);
对于获取enum
的Description
属性值的其他方法,请参考这个SO QA。
这种方法太"hacky"了,不够直接,您需要进行额外的类型转换,代码不清晰。您也可以像这样使用Enums.GetDescription((CustomerType)CustomerType.Type1)
,但如果我可以直接使用string CustomerType.Type1String
,那有什么意义呢。无论如何,谢谢,我之前不知道Description
属性 🙂
在这段内容中,提到了在使用静态字段时可能会出现的问题以及解决方法。问题是当使用普通的静态字段时,可能会不小心修改字段的值,从而导致神秘的故障。因此,推荐的解决方法是使用static readonly
和const
。
const
会导致变量的值在编译时嵌入到调用代码中,这与旧的硬编码代码基本相同(但具有符号常量的优势)。const
的危险在于,如果一个const
发生了变化,你必须重新编译所有相关的代码,否则可能会出现不同步的常量和棘手的错误。
static readonly
将导致正常的字段访问,因此你不会遇到同步问题。然而,由于额外的字段访问,可能会稍微降低性能(尽管在性能关键代码中使用这些字段很可能不会有明显的影响)。如果你认为将来可能需要更改这些字符串,那么建议使用static readonly
。
从这段内容中可以得出,这些值很少发生变化,因此使用const
是一个安全的选择。然而,最终的决定取决于你自己。