请解释为什么字典''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)
答案 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”前缀。