我有以下课程:
public class TransactionData
{
private Dictionary<string, List<string>> transactionsAndFilesDictionary = new Dictionary<string, List<string>>();
public bool FileBlocked(string transactionID, string fileName)
{
foreach (var entry in this.transactionsAndFilesDictionary)
{
if(entry.Value.Contains(fileName)){
if(entry.Key==transactionID) return false;
return true;
}
}
return false;
}
}
我遇到FileBlocked
方法的问题。线if(entry.Value.Contains(fileName))
上升异常,我不知道为什么。我只是想检查fileName
是否存在transactionID
。
答案 0 :(得分:0)
请尝试以下代码。字典值是一个我认为是问题的列表
public class TransactionData
{
private Dictionary<string, List<string>> transactionsAndFilesDictionary = new Dictionary<string, List<string>>();
public bool FileBlocked(string transactionID, string fileName)
{
foreach (var key in this.transactionsAndFilesDictionary.Keys)
{
if (transactionsAndFilesDictionary[key].Where(x => x.Contains(fileName)).Count() > 0)
{
return true;
}
}
return false;
}
}
答案 1 :(得分:0)
我猜 - 因为您没有显示如何向词典中添加条目 - 在您调用FileBlocked
方法时,列表未初始化。如果这是故意的,那么实际上是根据您的业务逻辑来访问可能是空的字典而不是您首先必须检查Value
是否存在。 entry.Value != null
应该做到这一点:
foreach (var entry in this.transactionsAndFilesDictionary)
{
if (entry.Value != null &&
entry.Value.Contains(fileName)){
if(entry.Key==transactionID) return false;
return true;
}
}
但是,如果访问entry.Value
是一个意想不到的副作用,并且永远不会发生,那么当您向字典中添加项目时,可能会丢失List初始化。
确保在向字典添加新myKey
时,您也会初始化列表。初始化字典时,它没有初始化:
this.transactionsAndFilesDictionary[myKey] = new List<string>();