Найдите строку в Enum и верните Enum - PullRequest
143 голосов
/ 18 февраля 2010

У меня есть перечисление:

public enum MyColours
{
    Red,
    Green,
    Blue,
    Yellow,
    Fuchsia,
    Aqua,
    Orange
}

и у меня есть строка:

string colour = "Red";

Я хочу иметь возможность вернуться:

MyColours.Red

от

public MyColours GetColour(string colour)

Пока у меня есть:

public MyColours GetColours(string colour)
{
    string[] colours = Enum.GetNames(typeof(MyColours));
    int[]    values  = Enum.GetValues(typeof(MyColours));
    int i;
    for(int i = 0; i < colours.Length; i++)
    {
        if(colour.Equals(colours[i], StringComparison.Ordinal)
            break;
    }
    int value = values[i];
    // I know all the information about the matched enumeration
    // but how do i convert this information into returning a
    // MyColour enumeration?
}

Как видите, я немного застрял. Есть ли в любом случае выбрать перечислитель по значению. Что-то вроде:

MyColour(2) 

приведет к

MyColour.Green

Ответы [ 12 ]

0 голосов
/ 19 февраля 2010

Возможно, вы также захотите ознакомиться с некоторыми предложениями в этом сообщении в блоге: Мой новый маленький друг, Enum

В этом посте описан способ создания очень простогоуниверсальный вспомогательный класс, который позволяет вам избежать уродливого синтаксиса приведения, присущего Enum.Parse - вместо этого вы заканчиваете тем, что пишете что-то вроде этого в своем коде:

MyColours colour = Enum<MyColours>.Parse(stringValue); 

Или посмотрите некоторые комментарии в том же постекоторые говорят об использовании метода расширения для достижения аналогичного.

0 голосов
/ 18 февраля 2010

Как упомянуто в предыдущих ответах, вы можете приводить непосредственно к базовому типу данных (int -> enum type) или анализировать (string -> enum type).

но будьте осторожны - для перечислений нет .TryParse, поэтому вам понадобится блок try / catch для разбора, чтобы перехватывать ошибки.

...