![](/img/trans.png)
[英]How to convert IEnumerable<MySpecificEnumType> to generic IEnumerable<Enum> in WPF (C#)
[英]How do I convert IEnumerable<Enum> to Enum in C#?
我已經將幾個字符串解析為Enum標志,但是看不到將它們合並到單個Enum位域的簡潔方法。
我正在使用的方法循環遍歷字符串值,然后| =枚舉值到Enum對象,如下所示:
[Flags]
public enum MyEnum { None = 0, First = 1, Second = 2, Third = 4 }
...
string[] flags = { "First", "Third" };
MyEnum e = MyEnum.None;
foreach (string flag in flags)
e |= (MyEnum)Enum.Parse(typeof(MyEnum), flag, true);
我嘗試使用Select方法轉換為我的Enum類型,但后來我堅持使用IEnumerable<MyEnum>
。 有什么建議?
好吧,從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);
(根據Guffa的回答,你可以在單個Aggregate
調用中執行它,但我個人認為,為了清楚起見,我將兩者分開。雖然這是個人偏好。)
請注意,我的Unconstrained Melody項目使枚舉處理更加愉快,您還可以在.NET 4中使用通用的Enum.TryParse
方法。
例如,使用Unconstrained Melody,您可以使用:
MyEnum result = flags.Select(x => Enums.ParseName<MyEnum>(x))
.Aggregate(MyEnum.None, (current, next) => current | next);
您可以使用Aggregate
方法將標記放在一起:
MyEnum e = flags
.Select(s => (MyEnum)Enum.Parse(typeof(MyEnum), s, true))
.Aggregate(MyEnum.None, (f, n) => f | n);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.