嗯,从一个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
根据古法的回答打电话,但我个人认为为了清楚起见,我会将两者分开。不过这是个人喜好。)
请注意,我的天马行空的旋律 http://code.google.com/p/unconstrained-melody/项目使枚举处理更加愉快,您还可以使用泛型Enum.TryParse http://msdn.microsoft.com/en-us/library/dd783499.aspx.NET 4 中的方法。
例如,使用 Unconstrained Melody 您可以使用:
MyEnum result = flags.Select(x => Enums.ParseName<MyEnum>(x))
.Aggregate(MyEnum.None, (current, next) => current | next);