【问题标题】:Convert a string[] to its associated array of enums [duplicate]将字符串 [] 转换为其关联的枚举数组 [重复]
【发布时间】:2014-11-17 12:09:10
【问题描述】:

我有一个字符串数组,它的项是字符串等价于枚举项:

enum MyEnum
{
    item1,
    item2,
    item3,
    ...
}

string[] strArray = {"item2", "item3"};

如何通过linq将strArraystring[]转换为MyEnum[]

【问题讨论】:

    标签: c# .net arrays linq enums


    【解决方案1】:
    MyEnum[] enumArray = strArray.Select(s => Enum.Parse(typeof(MyEnum), s))
                                 .Cast<MyEnum>()
                                 .ToArray();
    

    或者,如果这些字符串来自用户输入,您可能希望改用 Enum.TryParse

    【讨论】:

    • @KonradKokosa 正确,已修复 :)
    • 我认为您可以移动演员表,然后执行:strArray.Select(s =&gt; (MyEnum) Enum.Parse(typeof(MyEnum), s)).ToArray();(作为替代语法)。
    • @MatthewWatson 是的,我更喜欢自己打电话给Cast&lt;T&gt;,它利用了函数式编程的清晰性和可读性。
    【解决方案2】:
            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[]
    • 答案已更新;错过了 Enum.Parse 返回时的演员表
    • 是的,或者.Cast&lt;MyEnum&gt;()ToArray 之前(如dcastro 的回答所示)。
    • 确实如此。两者都是可以接受的,它只是归结为个人偏好的清晰度或正在遵循的代码库编码标准/指南:-)
    猜你喜欢
    • 2019-02-21
    • 2012-12-07
    • 1970-01-01
    • 2020-02-13
    • 2014-09-27
    • 2017-05-01
    • 1970-01-01
    相关资源
    最近更新 更多