使用C#中的值列表在Dictionary中查找项目

时间:2015-05-24 12:05:09

标签: c# dictionary

我有以下课程:

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

2 个答案:

答案 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>();