【发布时间】:2014-11-17 12:09:10
【问题描述】:
我有一个字符串数组,它的项是字符串等价于枚举项:
enum MyEnum
{
item1,
item2,
item3,
...
}
string[] strArray = {"item2", "item3"};
如何通过linq将strArray从string[]转换为MyEnum[]?
【问题讨论】:
我有一个字符串数组,它的项是字符串等价于枚举项:
enum MyEnum
{
item1,
item2,
item3,
...
}
string[] strArray = {"item2", "item3"};
如何通过linq将strArray从string[]转换为MyEnum[]?
【问题讨论】:
MyEnum[] enumArray = strArray.Select(s => Enum.Parse(typeof(MyEnum), s))
.Cast<MyEnum>()
.ToArray();
或者,如果这些字符串来自用户输入,您可能希望改用 Enum.TryParse。
【讨论】:
strArray.Select(s => (MyEnum) Enum.Parse(typeof(MyEnum), s)).ToArray();(作为替代语法)。
Cast<T>,它利用了函数式编程的清晰性和可读性。
string[] strArray = { "item2", "item3" };
MyEnum[] results = (from item in strArray
let parsed = (MyEnum) Enum.Parse(typeof (MyEnum), item)
select parsed).ToArray();
您也可以完全跳过已解析的子步骤行...
MyEnum[] results2 = (from item in strArray
select (MyEnum) Enum.Parse(typeof (MyEnum), item)).ToArray();
【讨论】:
object[],而不是根据需要创建一个MyEnum[]。
.Cast<MyEnum>() 在ToArray 之前(如dcastro 的回答所示)。