2012-12-12 40 views
8

我綁定的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"; 

可轉換myArraymyEnum使用C#飛?謝謝。

+0

您正在分配myArray []值不正確爲什麼你難以編碼枚舉值..? – MethodMan

回答

0

在循環中爲數組中的每個元素使用Enum.Parse

2

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

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

你怎麼會想使用與您的陣列我想達到你的需求。

編輯:任何機會,是否可以將您的適配器名稱作爲枚舉存儲在您的陣列中?數組必須是是否有字符串?

+0

我想綁定myArray到屬性網格和myArray看起來像Propery網格上的列表框,與將枚舉類型綁定到屬性網格時相同。這就是爲什麼我想將數組轉換爲枚舉。 –

+0

當你綁定一個數組myEnum [] myArray = new [] {m​​yEnum.Ethernet,myEnum.Wireless,myEnum.Bluetooth};'而不是? –

+0

問題,枚舉類型從來沒有存在過。程序運行時我獲取數據適配器名稱,然後將其存儲到字符串數組中。如果將字符串數組綁定到屬性網格,將在屬性網格上顯示字符串集合編輯器,而我想在屬性網格上顯示爲列表框。這就是爲什麼我要將字符串轉換爲枚舉類型的原因。 –

7

當然!這就是你需要的全部:

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

其實你需要投'的IEnumerable 項目= myArray.Select(A =>(myEnum)Enum.Parse(typeof運算(myEnum),A));'否則你會得到一個編譯器錯誤,因爲Enum.Parse()返回一個東西 – MarkG

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 
} 
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]枚舉,組合測試失敗。