将字符串数组转换为枚举

new*_*bie 9 c# arrays propertygrid enums winforms

我绑定enum到这样的属性网格:

public enum myEnum
{
    Ethernet,
    Wireless,
    Bluetooth
}

public class MyClass
{
    public MyClass()
    {
        MyProperty = MyEnum.Wireless;
    }

    [DefaultValue(MyEnum.Wireless)]
    public MyEnum MyProperty { get; set; }
}

public Form1()
{
    InitializeComponent();
    PropertyGrid pg = new PropertyGrid();
    pg.SelectedObject = new MyClass();
    pg.Dock = DockStyle.Fill;
    this.Controls.Add(pg);
}
Run Code Online (Sandbox Code Playgroud)

我的问题:我在程序运行时动态获取数据.我读了网络适配器然后存储适配器名称,myArray如下所示:

string[] myArray = new string[] { };
myArray[0] = "Ethernet";
myArray[1] = "Wireless";
myArray[2] = "Bluetooth";
Run Code Online (Sandbox Code Playgroud)

可以使用c#转换myArray为动态myEnum吗?谢谢.

Jos*_*hua 8

当然!这就是你所需要的:

IEnumerable<myEnum> items = myArray.Select(a => (myEnum)Enum.Parse(typeof(myEnum), a));
Run Code Online (Sandbox Code Playgroud)


Sun*_*000 5

TryParse()如果您的源数据不是完全可靠的,您可能需要考虑仅使用和转换实际可以解析的项目IsDefined()

从字符串数组中获取 myEnums 数组可以通过以下代码执行:

myEnum [] myEnums = myArray
    .Where(c => Enum.IsDefined(typeof(myEnum), c))
    .Select(c => (myEnum)Enum.Parse(typeof(myEnum), c))
    .ToArray();
Run Code Online (Sandbox Code Playgroud)

请注意,IsDefined()仅适用于单个枚举值。如果您有一个[Flags]枚举,则组合将无法通过测试。


Jak*_*cki 0

Enum.Parse在循环中使用数组中的每个元素。