将字符串数组转换为枚举

我将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); } 

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

 string[] myArray = new string[] { }; myArray[0] = "Ethernet"; myArray[1] = "Wireless"; myArray[2] = "Bluetooth"; 

可以使用c#将myArray myEnum转换为myEnum吗? 谢谢。

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

 IEnumerable items = myArray.Select(a => (myEnum)Enum.Parse(typeof(myEnum), a)); 

你想要使用Enum.Parse : http : //msdn.microsoft.com/en-us/library/essfb559.aspx

MyProperty = (myEnum)Enum.Parse(typeof(myEnum), myArray[0]);

您希望如何在arrays中使用它我认为可以满足您的需求。

编辑:在任何可能的情况下,首先将您的适配器名称作为枚举存储到您的arrays是否可行? 是否有某些原因数组必须是字符串?

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

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

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

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

如果要获取枚举值的名称,则不必使用Parse。 不要使用.ToString() ,而是使用它。 例如,如果我想返回Ethernet我会执行以下操作:

 public enum myEnum { Ethernet, Wireless, Bluetooth } 

在您的主类中添加以下代码行:

 var enumName = Enum.GetName(typeof(myEnum), 0); //Results = "Ethernet" 

如果要枚举Enum值,可以执行此操作以获取值:

 foreach (myEnum enumVals in Enum.GetValues(typeof(myEnum))) { Console.WriteLine(enumVals);//if you want to check the output for example } 

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