只有字符串值的公共枚举
本文关键字:枚举 字符串 | 更新日期: 2023-09-27 18:10:34
我总是不知道应该使用哪种枚举。一个哈希表,一个枚举,一个结构,一个字典,一个数组(怎么旧(,静态字符串。。。
我不想在代码中使用字符串,而是想使用一个漂亮的枚举,比如:
public enum MyConfigs
{
Configuration1,
Configuration2
}
问题是,我并不总是想转换枚举toString()
,因为我对enum
的索引表示不感兴趣。
表示基于字符串的值的公共枚举的最佳方式是什么
最后,我希望在代码中需要的地方使用MyConfigs.Configuration1
。
我更喜欢将"分组"常量定义为伪静态类的静态成员,如下所示:
public static class FieldNames
{
public const string BRANCH_CODE = "_frsBranchCode";
public const string BATCH_ID = "_frsBatchId";
public const string OFFICE_TYPE = "_frsOfficeType";
}
当然,它们不是直接"可枚举"的,所以除非你也提供一个静态数组,否则你不能预先遍历它们:
public static string[] AllFieldNames
{
get
{
return new string[]
{
FieldNames.BRANCH_CODE,
FieldNames.BATCH_ID,
FieldNames.OFFICE_TYPE
};
}
}
public static class MyConfigs
{
public const string Configuration1 = "foo",
Configuration2 = "bar"
}
这与枚举的实现方式几乎相同(忽略了"它必须是整数"这一整体(。
键入安全枚举模式?
public class StringEnum
{
#region Enum Values
public static readonly StringEnum ValueOne = new StringEnum("Value One");
public static readonly StringEnum ValueTwo = new StringEnum("Value Two");
#endregion
#region Enum Functionality
public readonly string Value;
private StringEnum(string value)
{
Value = value;
}
public override string ToString()
{
return value;
}
#endregion
}
你可以这样使用:
private void Foo(StringEnum enumVal)
{
return "String value: " + enumVal;
}
如果您从不需要以类型安全的方式将这些值传递给方法等,那么最好只使用常量文件。