2011-11-11 140 views
2

我想創建一個方法,可以遍歷一個鍵控集合。我想,以確保任何收集我的方法支持迭代,它擴展了KeyedCollection<string, Collection<string>>KeyedCollection是什麼的集合?

這裏的方法:

public void IterateCollection(KeyedCollection<string, Collection<string>> items) 
{ 
    foreach (??? item in items) 
    { 
     Console.WriteLine("Key: " + item.Key); 
     Console.WriteLine("Value: " + item.Value); 
    } 
} 

它沒有明顯的工作,因爲我不知道哪種類型應更換問題在循環中標記。我不能簡單地把objectvar,因爲我需要在循環體中稍後調用KeyValue屬性。我在找什麼類型的產品?謝謝。

+1

您應該考慮在您的幫助中使用ReSharper或任何其他代碼輔助工具。當你使用var時,ReSharper會給你一個明確指定類型的選項。所以你可以通過ReSharper(alt-enter) – edvaldig

+0

中的一個簡單的組合鍵來解決這個問題。如果你打電話給救援人員? 在你的情況下,項目將收集這是什麼KeyedCollection將返回,KeyedCollection會始終返回,檢查了這一點:http://msdn.microsoft.com/en-us/library/ms132438.aspx – VoidMain

+0

@edvaldig謝謝爲真棒提示! – Boris

回答

8

KeyedCollection<TKey, TItem>實現ICollection<TItem>,所以在這種情況下,你會使用:

foreach(Collection<string> item in items) 

這就是var會給你。您不要KeyedCollection中獲得鍵/值對 - 您只需獲取值。

有沒有可能KeyedCollection真的不是您最適合使用的類型?

+0

感謝Jon。我確實需要鍵/值對的集合,所以我使用'KeyedCollection'是錯誤的。你能不能給我推薦一個儘可能抽象的類,但可以達到我的目的?謝謝。 – Boris

+1

@Boris:只是'IDictionary '是我的建議。 –

2

根據KeyedCollection的統計員的定義,物品類型將爲Collection<String>。您不能任意決定使用適當的類型,以便在迭代不支持的情況下同時獲得KeyValue,在這種情況下它不適用。請注意,使用顯式類型和var完全相同。

如果要同時提供KeyValue迭代,則需要使用Dictionary<string, Collection<string>>類型。

+0

mellamokb,感謝您澄清明確的類型和變量。你能推薦一個可以達到我的目的的課程嗎?我需要一組鍵/值對。謝謝! – Boris

相關問題