Проблема не в разборе!Проблема в преобразовании в текст.Поскольку значения флага не являются различными битовыми масками, нет детерминированного отображения на строку и обратно.Как уже упоминалось другими, вы должны выбрать такие значения, как, например:
[Flags]
public enum LogLevel
{
None = 0
Error = 1 << 0,
Warning = 1 << 1,
Info = 1 << 2,
// etc
}
См. MSDN: анализ значений перечисления
См. Демонстрационный пример: https://ideone.com/8AkSQ
using System;
[Flags] enum Colors { None=0, Red = 1, Green = 2, Blue = 4 };
public class Example
{
public static void Main()
{
string[] colorStrings = { "0", "2", "8", "blue", "Blue", "Yellow", "Red, Green" };
foreach (string colorString in colorStrings)
{
try {
Colors colorValue = (Colors) Enum.Parse(typeof(Colors), colorString);
if (Enum.IsDefined(typeof(Colors), colorValue) | colorValue.ToString().Contains(","))
Console.WriteLine("Converted '{0}' to {1}.", colorString, colorValue.ToString());
else
Console.WriteLine("{0} is not an underlying value of the Colors enumeration.", colorString);
}
catch (ArgumentException) {
Console.WriteLine("'{0}' is not a member of the Colors enumeration.", colorString);
}
}
}
}
Вывод:
Converted '0' to None.
Converted '2' to Green.
8 is not an underlying value of the Colors enumeration.
'blue' is not a member of the Colors enumeration.
Converted 'Blue' to Blue.
'Yellow' is not a member of the Colors enumeration.
Converted 'Red, Green' to Red, Green.
Примечание по производительности:
Если производительность важна, не полагаться на Enum.Parse :)
См. Как мне преобразовать строку в перечисление в C #?