只有字符串值的公共枚举

本文关键字:枚举 字符串 | 更新日期: 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;
}

如果您从不需要以类型安全的方式将这些值传递给方法等,那么最好只使用常量文件。