Конвертировать CSV из флагов enum и наоборот - PullRequest
5 голосов
/ 09 августа 2011

Рассмотрим следующее перечисление:

[Flags]
public enum MyEnum
{
    Option1 = 0,
    Option2 = 1,
    Option3 = 2,
    Option4 = 4
}

Есть ли способ получить строковый эквивалент (не значение) в виде строки CSV?Обычно я могу использовать функцию Enum.GetName для преобразования типа в строковое представление, однако, если вы используете комбинацию, это возвращает нуль.

Так что в основном я хотел бы преобразовать:

var options = MyEnum.Option1 | MyEnum.Option3;

в

"Option1, Option3" 

Тогда я хотел бы иметь возможность преобразовать "Option1, Option3" обратно в MyEnum.Option1 | MyEnum.Option2.

Предложения?

Ответы [ 2 ]

7 голосов
/ 09 августа 2011

Ну, кроме Option1, не имеющего особого смысла в перечислении flags, это просто работает по умолчанию, используя Enum.Parse и Enum.ToString().

Начните с этого:

var options = MyEnum.Option2 | MyEnum.Option3;
Console.WriteLine(options.ToString());
// Outputs: Option2, Option3

Тогда вы всегда можете сделать это:

var options2 = (MyEnum) Enum.Parse(typeof (MyEnum), "Option2, Option3");

Теперь попробуйте это:

Console.WriteLine((options2 & MyEnum.Option2) == MyEnum.Option2);
Console.WriteLine((options2 & MyEnum.Option4) == MyEnum.Option4);
// Outputs:
//    true
//    false

Кажется, что это именно то, что вы хотели (опять же, игнорируя тот факт, что Option1 в вашемпример никогда не появится)

документы: Enum.Parse

0 голосов
/ 09 августа 2011

Вы можете сделать Enum.GetValues, который получает массив значений перечисления.Затем вы можете просмотреть эти значения и проверить их на соответствие вашему значению Enum, конкатенируя строковое значение для каждого из них.С другой стороны, вы можете перебирать значения, используя функцию Enum.GetName, чтобы проверить, содержит ли ваша строка это имя, и затем перестроить значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...