2012-04-05 40 views
1

請解釋爲什麼字典的「getAt」的方法失敗字典ContainsKey方法

List<BString> infoKeys = new List<BString>(infoDict.Keys); 
if (infoKeys.Contains(TorrentFileKeyWords.FILES_KEY) == true) //"files" 
{ 
     List<BaseType> multiFiles = ((BList)dict[TorrentFileKeyWords.FILES_KEY]).Value; <<< this fails 

所以infoDict是Dictionary<String, BString> 包含有關infoDict.Keys用於查找(類型BString) 但4號線發生故障的具體項目......可是沒有SENS

我不與C#中使用..所以做什麼方法我要重寫(現在我有!GetHashCode的,==,= &等於)

+6

你得到什麼錯誤? – Douglas 2012-04-05 19:51:58

+1

什麼是'dict'定義爲? – Matthew 2012-04-05 19:54:20

+2

你沒有提供足夠的代碼來正確地幫助你,並且你也沒有提出錯誤。請閱讀http://tinyurl.com/so-hints。 – 2012-04-05 19:54:26

回答

2

我懷疑問題THA牛逼你在一個地方使用infoDict,而在另一個dict ...

爲什麼你要創建從infoDict密鑰的列表,而不是隻調用ContainsKey,或(更好)使用TryGetValue開始目前尚不清楚用。此外,我建議之間的「B」前綴爲您的類型名稱。

+0

你是對的!我的錯 – pulancheck1988 2012-04-06 09:07:38

3

您不應該將您的Keys複製到新列表中以執行查找。事實上,你可以檢查按鍵是否存在於詞典在一次操作中檢索及其關聯值使用TryGetValue方法:

BList bList; 
if (dict.TryGetValue(TorrentFileKeyWords.FILES_KEY, out bList)) 
{ 
    List<BaseType> multiFiles = bList.Value; 
    // use multiFiles here 
}