簡體   English   中英

在字典中查找帶有C#值列表的項目

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM