gpt4 book ai didi

c# - 如何在 C# 中将 IEnumerable 转换为枚举?

转载 作者:太空狗 更新时间:2023-10-29 22:12:47 27 4
gpt4 key购买 nike

我已经将几个字符串解析为枚举标志,但看不到将它们合并为单个枚举位域的巧妙方法。

我正在使用的方法循环遍历字符串值,然后 |= 转换为 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 project 使枚举处理更加愉快,您还可以使用通用的 Enum.TryParse .NET 4 中的方法。

例如,使用 Unconstrained Melody 你可以使用:

MyEnum result = flags.Select(x => Enums.ParseName<MyEnum>(x))
.Aggregate(MyEnum.None, (current, next) => current | next);

关于c# - 如何在 C# 中将 IEnumerable<Enum> 转换为枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6972937/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com