我将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
吗?谢谢。
答案 0 :(得分:8)
当然!这就是你所需要的:
IEnumerable<myEnum> items = myArray.Select(a => (myEnum)Enum.Parse(typeof(myEnum), a));
答案 1 :(得分:2)
您需要使用Enum.Parse
:http://msdn.microsoft.com/en-us/library/essfb559.aspx
MyProperty = (myEnum)Enum.Parse(typeof(myEnum), myArray[0]);
您希望如何在阵列中使用它我认为可以满足您的需求。
编辑:在任何可能的情况下,首先将您的适配器名称作为枚举存储到您的阵列是否可行?是否有某些原因,数组必须是字符串?
答案 2 :(得分:2)
如果您的源数据不是完全可靠的,您可能需要考虑使用TryParse()
和IsDefined()
仅转换实际可以解析的项目。
从字符串数组中获取myEnums数组可以通过以下代码执行:
myEnum [] myEnums = myArray
.Where(c => Enum.IsDefined(typeof(myEnum), c))
.Select(c => (myEnum)Enum.Parse(typeof(myEnum), c))
.ToArray();
请注意,IsDefined()
仅适用于单个枚举值。如果您有[Flags]
枚举,则组合将无法通过测试。
答案 3 :(得分:1)
如果要获取枚举值的名称,则不必使用Parse。不要使用.ToString()
,请改用它。例如,如果我想返回Ethernet
,我会执行以下操作:
public enum myEnum
{
Ethernet,
Wireless,
Bluetooth
}
在您的主类中添加以下代码行:
var enumName = Enum.GetName(typeof(myEnum), 0); //Results = "Ethernet"
如果要枚举枚举值,可以执行此操作以获取值:
foreach (myEnum enumVals in Enum.GetValues(typeof(myEnum)))
{
Console.WriteLine(enumVals);//if you want to check the output for example
}
答案 4 :(得分:0)
在循环中为数组中的每个元素使用Enum.Parse
。