我总是混淆我应该使用哪种枚举。哈希表,枚举,结构,字典,数组(如何oldschool),静态字符串......
我不想在我的代码中使用字符串,而是想使用像这样的漂亮枚举:
public enum MyConfigs
{
Configuration1,
Configuration2
}
问题是我并不总是希望转换我的枚举toString()
,因为我对enum
的索引表示不感兴趣。
表示基于字符串的值的公开枚举的最佳方法是什么?
最后,我希望最终在我的代码中使用MyConfigs.Configuration1
。
答案 0 :(得分:2)
我更喜欢将“分组”常量定义为虚拟静态类的静态成员,如下所示:
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
};
}
}
答案 1 :(得分:1)
public static class MyConfigs
{
public const string Configuration1 = "foo",
Configuration2 = "bar"
}
这与枚举的实现方式非常相似(忽略整个“它必须是整数”的东西)。
答案 2 :(得分:1)
类型安全的枚举模式?
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;
}
如果您永远不需要以类型安全的方式将这些值传递给方法等,那么最好只使用常量文件。