字典ContainsKey方法

时间:2012-04-05 19:49:45

标签: c# dictionary contains

请解释为什么字典''getAt'方法失败

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行失败了......没有感觉

我不习惯用c#..所以我必须覆盖哪些方法(现在我有:GetHashCode,==,!=&amp; equals)

2 个答案:

答案 0 :(得分:3)

您不需要将Keys复制到新列表来执行查找。实际上,您可以使用TryGetValue方法检查字典中是否存在密钥,在单个操作中检索其关联值:

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

答案 1 :(得分:2)

我怀疑问题是你在一个地方使用infoDict,而在另一个地方使用dict ......

目前尚不清楚为什么要从infoDict的密钥创建列表,而不是仅仅使用ContainsKey或(更好)使用TryGetValue开始。另外,我建议反对你的类型名称的“B”前缀。