[英]finding item in Dictionary with list of values in C#
我有以下课程:
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
。
请尝试以下代码。 您的字典值是我认为是问题的列表
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;
}
}
我猜-因为您没有显示如何向字典中添加条目-调用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>();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.