Открытое перечисление только со строковыми значениями - PullRequest
3 голосов
/ 07 октября 2011

Меня всегда смущает, какой тип перечисления мне следует использовать. Хеш-таблица, перечисление, структура словарь, массив (как oldschool), статические строки ...

Вместо использования строк в моем коде я хочу использовать красивое перечисление, например, так:

public enum MyConfigs
{
    Configuration1,
    Configuration2
}

Проблема в том, что я не всегда хочу конвертировать мое перечисление toString(), поскольку меня не интересует индексное представление enum.

Каков наилучший способ представления публичного перечисления строковых значений?
В конце я бы хотел использовать MyConfigs.Configuration1, где это необходимо, в моем коде.

Ответы [ 3 ]

2 голосов
/ 07 октября 2011

Я предпочитаю определять «сгруппированные» константы как статические члены фиктивного статического класса, например:

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 голос
/ 07 октября 2011

Тип-перечислимый шаблон enum?

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

Если вам никогда не нужно передавать эти значения безопасным для типа способом в методыи т.д. тогда, вероятно, лучше всего придерживаться файла констант.

1 голос
/ 07 октября 2011
public static class MyConfigs
{
    public const string Configuration1 = "foo",
                        Configuration2 = "bar"
}

Это тогда в значительной степени идентично тому, как реализованы перечисления (игнорируя всю вещь "это должно быть целое число").

...