C# 字典法

C# 字典法,c#,dictionary,contains,C#,Dictionary,Contains,请解释dictionary的“getAt”方法失败的原因 List<BString> infoKeys = new List<BString>(infoDict.Keys); if (infoKeys.Contains(TorrentFileKeyWords.FILES_KEY) == true) //"files" { List<BaseType> multiFiles = ((BList)dict[TorrentFileKeyWor

请解释dictionary的“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
List infoKeys=新列表(infoDict.Keys);
if(infoKeys.Contains(TorrentFileKeyWords.FILES\u KEY)==true)/“FILES”
{   

列出多文件=((BList)dict[TorrentFileKeyWords.FILES_KEY]).Value;我怀疑问题在于您在一个位置使用了
infoDict
,而在另一个位置使用了
dict


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

我怀疑问题在于您在一个位置使用了
infoDict
,而在另一个位置使用了
dict


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

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

BList bList;
if (dict.TryGetValue(TorrentFileKeyWords.FILES_KEY, out bList))
{
    List<BaseType> multiFiles = bList.Value;
    // use multiFiles here
}
blistblist;
if(dict.TryGetValue(TorrentFileKeyWords.FILES_KEY,out bList))
{
列表多文件=bList.Value;
//在这里使用多文件
}

您不需要将
复制到新列表来执行查找。事实上,您可以使用
TryGetValue
方法检查字典中是否存在该键,并在一次操作中检索其关联值:

BList bList;
if (dict.TryGetValue(TorrentFileKeyWords.FILES_KEY, out bList))
{
    List<BaseType> multiFiles = bList.Value;
    // use multiFiles here
}
blistblist;
if(dict.TryGetValue(TorrentFileKeyWords.FILES_KEY,out bList))
{
列表多文件=bList.Value;
//在这里使用多文件
}

您遇到了什么错误?您没有提供足够的代码来正确地帮助您,而且您也没有提供错误。请阅读。类型到底是什么?如果
infoDict
是一本
字典
,那么
infoDict.Keys
将是
String
的集合,而不是
BString
的集合。您遇到了什么错误?您没有提供足够的代码来正确帮助您,而且您也没有提供错误。请阅读。真正的类型是什么?如果
infoDict
是一本
字典,那么
infoDict.Keys
将是
String
的集合,而不是
BString
的集合。