Ну, из IEnumerable<MyEnum>
вы можете использовать:
MyEnum result = parsed.Aggregate((current, next) => current | next);
или для размещения пустой последовательности:
MyEnum result = parsed.Aggregate(MyEnum.None, (current, next) => current | next);
Это в основном то же самое, что и выуже получил, по общему признанию ...
Таким образом, в целом, код будет:
MyEnum result = flags.Select(x => (MyEnum) Enum.Parse(typeof(MyEnum), x))
.Aggregate(MyEnum.None, (current, next) => current | next);
(Вы можете выполнить это в один вызов Aggregate
согласно ответу Гуффы, но лично ядумаю, я бы оставил их отдельно для ясности. Это личное предпочтение.)
Обратите внимание, что мой проект Unconstrained Melody делает обработку enum несколько более приятной, и вы также можете использоватьуниверсальный Enum.TryParse
метод в .NET 4.
Так, например, используя неограниченную мелодию, вы можете использовать:
MyEnum result = flags.Select(x => Enums.ParseName<MyEnum>(x))
.Aggregate(MyEnum.None, (current, next) => current | next);