2012-07-10 55 views
14

可能重複:
Duplicate keys in .NET dictionaries?是否有詞典<Key,Value>沒有唯一鍵?

我需要創建一個Collection<string,object>,一個是字符串,另一個是一個對象。 我無法使用詞典,因爲沒有任何項目是唯一的。

有什麼辦法可以創建List<T,T>?因爲我不想創建一個對象來保存這兩個值只是爲了在單個foreach循環中使用它。

謝謝

+0

enum是否適合你的需求?我不知道你想實現。 – Freeman 2012-07-10 08:42:35

+3

爲什麼不能創建'Dictionary >'? – 2012-07-10 08:42:56

+1

KeyValuePair的列表? http://msdn.microsoft.com/en-us/library/5tbh8a42.aspx – dash 2012-07-10 08:43:00

回答

19

嘗試List<Tuple<string, object>>。然後,您可以在列表中獲得通常的linq支持,以獲得每個Tuple<string, object>

從.NET 4起,可以使用Tuple<,> class,但是您可以輕鬆模仿您自己的元組類型,而無需太多麻煩。

我認爲元組根據它們的項目值被認爲是相等的,但是與object這可能是參考平等,因此不應該是相等的......如果這是有意義的!平等

此處瞭解詳情:

Surprising Tuple (in)equality

更新:

如果您需要的項目清單與查詢的目的鑰匙聯繫起來,重複的問題答案正確地突出Lookup類(在你的情況下,Lookup<string, object>),這將表達你的意圖比List<Tuple<string, object>>更清楚一點。

+1

需要注意的是,元組在舊版本的.Net中不可用 - 它是在.Net 4中引入的 – dash 2012-07-10 08:46:13

+0

@dash是真的,但對於較早的版本,Tuple可以實現一般化,許多人在Tuple被烘烤之前實現。問題的方式是無法識別的,所以我保留採取最新的:-)的權利,謝謝澄清。 – 2012-07-10 08:47:23

+1

評論是爲其他人誰看到你的答案 - PowerCollections永遠擁有它:-) – dash 2012-07-10 08:48:02

4

嘗試創建自己的自定義類,並用它

class KeyValue<Tkey,TValue> 
    { 
     public Tkey Key {get;set;} 
     public TValue Value {get;set;} 
    } 

使用像

List<KeyValue<string,string>> list = new List<KeyValue<string,string>>(); 
+0

謝謝,我寫了我,我想避免創建新的對象類型。 – eugeneK 2012-07-10 08:51:04

6

可以使用

List<KeyValuePair<string,object>> 

Dictionary<string,List<object>> 
3

也許你可以使用Tuple類創建一個元組列表?事情是這樣:

List<Tuple<String, Object>> list = new List<Tuple<String, Object>>(); 
0

你有沒有考慮過使用「集團通過」然後轉身分組結果到字典?如果您正在使用較早版本的

var list = new List<Tuple<string, object>>(); 

+0

不確定它會在這種情況下工作。 – eugeneK 2012-07-10 08:48:06

相關問題