C# 在字典中查找具有C中值列表的项#

C# 在字典中查找具有C中值列表的项#,c#,dictionary,C#,Dictionary,我有以下课程: public class TransactionData { private Dictionary<string, List<string>> transactionsAndFilesDictionary = new Dictionary<string, List<string>>(); public bool FileBlocked(string transactionID, string fileName)

我有以下课程:

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;
    }
}
公共类事务数据
{
private Dictionary transactionsAndFilesDictionary=新建字典();
public bool FileBlocked(字符串事务ID,字符串文件名)
{
foreach(此.TransactionsandFileDictionary中的var条目)
{
if(entry.Value.Contains(fileName)){
if(entry.Key==transactionID)返回false;
返回true;
}
}
返回false;
}
}

我对
FileBlocked
方法有问题。行
if(entry.Value.Contains(fileName))
出现异常,我不知道为什么。我只想检查
文件名
是否存在任何
事务ID

请尝试下面的代码。你的字典值是一个列表,我认为这就是问题所在

   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;
        }
    }​
公共类事务数据
{
private Dictionary transactionsAndFilesDictionary=新建字典();
public bool FileBlocked(字符串事务ID,字符串文件名)
{
foreach(此.transactionsAndFilesDictionary.Keys中的var键)
{
if(transactionsandfilesdirectionary[key]。其中(x=>x.Contains(fileName)).Count()>0)
{
返回true;
}
}
返回false;
}
}​

我猜-因为您没有显示如何向词典添加条目-在调用
FileBlocked
方法时,列表未初始化。如果这是有意的,那就是访问一个可能是空的字典实际上符合您的业务逻辑,而您首先必须检查
值是否存在<代码>entry.Value!=空值
应该可以做到这一点:

foreach (var entry in this.transactionsAndFilesDictionary)
{
    if (entry.Value != null &&
        entry.Value.Contains(fileName)){
        if(entry.Key==transactionID) return false;
        return true;
    }
}
但是,如果访问
条目.Value
是一个意外的副作用,并且永远不会发生,则在向字典添加项目时,可能会丢失列表初始化

确保在向字典中添加新的
myKey
时,您也初始化了列表。初始化字典时,它未初始化:

this.transactionsAndFilesDictionary[myKey] = new List<string>();
this.transactionsAndFilesDictionary[myKey]=新列表();

出现了什么异常情况?我在说它是空的吗?如果是,您必须确保每个
条目的
不是空的或空的。请向我们显示将数据添加到
TransactionsandFileDictionary
中的代码。第一次将transactionID添加到字典时,我将vale设置为null。。。我的错误。非常感谢你!你试过调试你的代码吗?在给出异常的行上设置一个断点,并检查
entry
是否为
null
。是的。问题解决了。感谢您的参与!在我发布解决方案之前4分钟。