我正在寻找关于如何创建类似枚举的类的最佳实践,而不是数字包含字符串值。 像这样:
public static class CustomerType
{
public static string Type1 = "Customer Type 1";
public static string Type2 = "Customer Type 2";
}
我会在整个应用程序中使用此类作为我需要CustomerType的所有情况的值。我不能使用Enum,因为这是遗留系统,这样的值在任何地方都是硬编码的,我只是想把它们集中在一个地方。
在上面的示例中,问题是我应该用于声明变量:
设置这些类和值的最佳做法是什么?
答案 0 :(得分:13)
你应该不使用普通static
,因为这些字段可能会被无意中修改并导致神秘破损。因此,您的两个选择是static readonly
和const
。
const
将导致变量的值在编译时嵌入到调用代码中,这有效地等同于旧的硬编码代码(但具有符号常量的优点)。 const
的危险在于,如果const
发生变化,您必须重新编译所有内容,以免最终出现不同步的常量和棘手的错误。
static readonly
将导致正常的字段访问,因此您不会遇到同步问题。但是,由于额外的字段访问,您可能会受到轻微的性能影响(尽管除非您在性能关键代码中大量使用这些字段,否则它可能不会引起注意)。如果您认为将来某个时候必须更改字符串,则需要使用static readonly
。
从它的声音来看,值很少变化,const
是一个安全的赌注。但是,最终的决定取决于你。
答案 1 :(得分:2)
如果您使用的是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