2014-02-05 86 views
0

我有一類像如下:如何通過類對象訪問列表中的字典值?

public class Source 
{  
    ... 
    ... 
    public List<Dictionary<int, int>> blanks { get; set; } 
} 

我創建了這樣的一個對象,併爲它的字典。我填入'dic'字典。然後,我將這個dic添加到空白列表中。

Source src = new Source(); 
Dictionary<int, int> dic = new Dictionary<int, int>(); 
dic.Add(30, 50); 
dic.Add(40, 60); 
src.blanks.Add(dic); 

我嘗試訪問這些'Key'和'Value'元素。但是,我不能。

int a = src.blanks[0].Key; 
int b = src.blanks[0].Value; 

我能做些什麼來訪問這些元素?

謝謝。

+1

你忘記了字典的索引。簡單地說,作爲一個例子'src.blanks [0] [Key]' – Silvermind

回答

2

src.blanks[0]是一本完整的字典,而不是一個KeyValuePair<int,int>。這就是爲什麼你不能訪問它上面的.Key.Value - 有可能有很多鍵和許多與它們相關的值。

您可以通過列舉它們,這樣在零位訪問所有鍵值對在詞典:

foreach (var kvp in src.blanks[0]) { 
    int a = kvp.Key; 
    int b = kvp.Value; 
    Console.WriteLine("Key:{0} Value:{1}", a, b); 
} 
2

blanks[0]返回Dictionary<int, int>,你需要指定項目的關鍵。

src.blanks[0][key] 

或者遍歷你的價值觀:

foreach(var pair in src.blanks[0]) 
{ 
    int currentKey = pair.Key; 
    int currentValue = pair.Value; 
} 
0

得到你應該第一個索引列表,然後指數字典

中獲取價值的價值

int b = (src.blanks[0])[0] 
1

你正試圖在列表中訪問字典沒有Key屬性。 Keyvaluepairs字典有鍵。

因此,假如你想看看在列表中的第一部字典:

Dictionary<int, int> dict = s.blanks[0]; 
// lookup 30: 
int value = dict[30]; // 40 
0

你想要的東西,像下面這樣:

var listItem = src.blanks[0]; 
var dictionaryItem = listItem[0]; 

var a = dictionaryItem.Key; 
var b = dictionaryItem.Value; 

不過,我建議你擺脫那些「嵌套泛型「List<Dictionary<..,..>。如果您使用這些嵌套的結構,您將無法區分您處理的對象類型。 使用更能代表業務邏輯的其他結構。例如,你可以從列表中派生出你自己的類