[英]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.