2011-07-15 193 views
5

我正在使用C#字典。C#字典,每個鍵有多個值

Dictionary<int, string> d = new Dictionary<int, string>(); 

我正在使用字典,因爲我可以讓鍵值是唯一的,並由字典強制執行。

鍵值爲int。在我只需要一個價值之前。現在事情已經擴展到我需要爲同一個鍵存儲多個值(使用不同數據類型)的地方。

像這樣的東西 - (雖然它不會工作):

Dictionary<int,string,string,bool, bool,int,bool> d = new Dictionary<int, string,string,bool, bool,int,bool>(); 

需要注意的是字符串,字符串,BOOL,BOOL,INT,BOOL是我喜歡存儲,這將是關鍵領域的附加值一個int。

我不知道如何去做這件事。我如何獲得一個關鍵值來存儲具有不同數據類型的多個值。在我看到這可能的方式是將附加字段存儲到列表中,但不知道它將如何全部出現。如果有人可以提供和例如,將不勝感激。

在此先感謝。

回答

11

您可以使用Tuple作爲該值的通用類型。

var d = new Dictionary<int,Tuple<string,string,bool, bool,int,bool>>(); 

可選擇地,創建一個類型(類或結構),它保存不同類型的作爲一個組 - 有機會,這將是更好的方式來的東西進行建模。

+0

+1只是因爲這是性感,我從來沒有見過它。 –

+8

我會提醒你不要使用元組,因爲當你打字的時候,你沒有上下文的意思。*在這種情況下,我會提高封裝類的建議,使其成爲主要答案的替代方案,正如@spender所做的那樣。 –

+0

我同意@AnthonyPegram,請不要使用Tuple。 IMO Tuples只是開發人員的懶惰。類是類型安全和上下文清楚的。 – Neil

15

使用string, string, bool, bool, int, bool字段進行自定義數據類型,並將其用作字典值。

class MyType 
{ 
    public string SomeVal1{ get; set; } 
    public string SomeVal2{ get; set; } 
    public bool SomeVal3{ get; set; } 
    public bool SomeVal4{ get; set; } 
    public int SomeVal5{ get; set; } 
    public bool SomeVal6{ get; set; } 
} 

然後

var someDictionary = new Dictionary<int, MyType>(); 

someDictionary.Add(1, 
        new MyType{ 
         SomeVal1 = "foo", 
         SomeVal2 = "bar", 
         SomeVal3 = true, 
         SomeVal4 = false, 
         SomeVal5 = 42, 
         SomeVal6 = true 
        }); 
0

唯一覺得所有東西愛好者在這裏說,我可以補充,我想你應該到封裝那本字典爲若干類,所以該字典封裝的用戶將永遠不會知道引擎蓋下發生了什麼,並且實現了在該類內部您的首選恢復邏輯,或這裏列出的其中一個。

+0

我會建議一個類的結構,因爲它將不包含任何方法,因此,最好使用值類型,而不是引用類型,它在堆上,並且需要垃圾收集工作來釋放內存,處理後的。我當然不會使用Tuple。實際上,我認爲使用Tuple和使用var來命名類型一樣糟糕。 –

0

字典是key/value配對。一個鍵對應一個值。該值可以是任何對象,因此您可以簡單地創建一個包含您所需的所有成員的對象。考慮以下內容:

var d = new Dictionary<int, string, string, bool, bool, int, bool>(); 

該字典的使用者將不知道這些基元類型數據意圖表示什麼。您應該創建一個對象:

public class Person : IPerson 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public bool IsMarried { get; set; } 
    public bool HasChildren { get; set; }   
    public bool IsHappy { get; set; } 

    public Person(int id) 
    { 
     Id = id; 
    } 
} 

顯然,這對象完全由匹配的類型和代表一個容器中的數據的目的。有了這個理解,你可以做到以下幾點:

var d = new Dictionary<int, IPerson>(); 
相關問題