2013-11-04 52 views
0

我有這樣如何轉換IEnumerable的到字典

Dictionary<MyStructure, MyObject> 

MYSTRUCTURE字典意味着公共結構... MyObject來指特定的實體...

然後通過我的事件通過我的字典作爲

IEnumerable<MyObject> col = this.GetCollection().Values; 

然後,當我管理我的事件我使用IEnumerable,但我想將其轉換爲以前的字典來訪問它的屬性,但我無法做到這一點。我試試這個。

 Dictionary<MyStructure, MyObject> dict = 
      args.MyObjectCollection.ToDictionary(x => x.Key, y => y.Value); 

我正在使用「using System.Linq;」和密鑰和價值不承認。當我在x或y之後寫點時。該幫助程序向我顯示對象MyObject的屬性。

+1

你不能,你只有價值,而不是鑰匙了。您需要修復事件,以便它傳遞IDictionary <>或者IEnumerable '。還要考慮這是否是必要的,當您通過發件人的屬性或GetXxx()方法公開字典時也不會。事件通常應該只傳遞只在特定時刻有效的數據,以便事件發生並且不能通過其他方式合理獲得。傳遞字典是一種代碼異味,事件接收者存儲數據的陳舊副本的可能性太大。 –

回答

2

當你讓你的IEnumerable,你失去了你的MYSTRUCTURE鍵... 如果你知道一種方法來創建從MyObject的情況下,適當的結構,那麼你就可以解決這個...

MyObjectCollection.ToDictionary(x=>makeStructFromMyObject(x), x=>x); 


//... with... 

private MyStruct makeStructFromMyObject(MyObject obj) 
{ 
    //to be implemented by you 
} 

如果你正在尋找一種替代方案......通過整個字典從它仍然有原始數據的點

1

如果您的集合不是KeyValuePair或其他類型的Key和Value屬性的集合,則不能調用它們。所有值的集合只是該類型的集合。