1

请解释为什么字典的“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 是 infoDict 上的Dictionary<String, BString> Contains。Keys 用于查找特定项目(BString 类型)但第 4 行失败......没有 sens

我不使用 c#.. 所以我必须重写哪些方法(现在我有:GetHashCode、==、!= 和等于)

4

2 回答 2

3

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

BList bList;
if (dict.TryGetValue(TorrentFileKeyWords.FILES_KEY, out bList))
{
    List<BaseType> multiFiles = bList.Value;
    // use multiFiles here
}
于 2012-04-05T19:56:38.000 回答
2

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

目前尚不清楚为什么您要从 的 键创建列表,infoDict而不仅仅是调用ContainsKey,或者(更好地)使用TryGetValue开始。此外,我建议不要为您的类型名称添加“B”前缀。

于 2012-04-05T19:54:50.010 回答