仅包含字符串值的公共枚举

时间:2011-10-07 08:16:31

标签: c# enumeration

我总是混淆我应该使用哪种枚举。哈希表,枚举,结构,字典,数组(如何oldschool),静态字符串......

我不想在我的代码中使用字符串,而是想使用像这样的漂亮枚举:

public enum MyConfigs
{
    Configuration1,
    Configuration2
}

问题是我并不总是希望转换我的枚举toString(),因为我对enum的索引表示不感兴趣。

表示基于字符串的值的公开枚举的最佳方法是什么?
最后,我希望最终在我的代码中使用MyConfigs.Configuration1

3 个答案:

答案 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;
}

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