2010-03-22 78 views
1

我想填充object[]List<string>,但我不知道如何使用ConvertAll。 MSDN沒有幫助我。 起初,我試圖創建一個轉換器的實例,但它看起來像期待委託?C#轉換困難

Converter<string, object> conv = new Converter<string, object>(??); //why delegate? 
this.comboBox1.Items.AddRange(Form1.AnimalType.ConvertAll<object>(conv)); 

謝謝:)

回答

0

沒有必要轉換以.NET運行時中的所有類型作爲對象繼承對象。

如果你想列表Form1.AnimalTypes的成員分配到組合框,你應該可以直接將它們添加到Items集合,然後你應該設置DisplayMember到要顯示屬性和ValueMember的名稱的名稱你想要綁定的屬性。

comboBox.Items.AddRange(Form1.AnimalTypes); 
comboBox.DisplayMember = "AnimalTypeName"; 
comboBox.ValueMember = "AnimalTypeId"; 

如果你想剛纔的轉換和分配到組合框不要緊,你可以做到以下幾點:

object[] myArray = Form1.AnimalTypes.ToArray(); 

需要轉換器類不是由定義的轉換一個對象的繼承,即使用轉換器,如果你想將蘋果轉換成橙子,但如果你想將轉換成果子或桔子轉換爲水果,則使用轉換。 C#3.0中,你可以通過下面的代碼片斷投下一個完整的集合:

var newColOfBaseType = myList.Cast<BaseType>(); 

使用LINQ,你也可以從收集過濾接一個給定類型的項,然後提取特定類型的集合:

var oranges = fruit.OfType<Orange>().Cast<Orange>(); 

使用LINQ,你也可以使用Select做一個轉型:

var oranges = apples.Select(new Orange() { /* ... and initializers here ...*/}); 
0

委託變換集合的每個成員到所述請求的類型。

如果您正在嘗試將對象轉換爲字符串,嘗試像

conv = o => o.ToString(); 

如果您正在嘗試將字符串轉換爲對象,嘗試像

conv = ParseStringIntoObject; 

object ParseStringIntoObject(string stringRepresentation) 
{ 
    // do whatever you need to do in order to convert your string 
} 
+0

嗯然後我真的很想念Converter類的點。這和寫簡單的轉換方法有什麼區別? – Petr 2010-03-22 08:17:02

+2

使用轉換器將爲您「執行列表中的每個項目」位 - 爲您提供委託,並將其應用於列表中的每個項目(使用ConvertAll)。這也允許您將轉換邏輯與代碼的其餘部分分開 - 您可以使用工廠類或類似的東西來根據某些變量選擇合適的Converter。 – 2010-03-22 08:21:28