2015-05-24 45 views
0

我有下面的類:詞典使用值列表在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

+6

什麼異常正在上升?我在說這是一個空的?如果確實如此,則必須確保每個「條目」的「值」不爲空或爲空。 – Eminem

+0

請向我們展示將數據添加到'transactionsAndFilesDictionary'的代碼。 – abto

+0

確實。第一次,我將transactionID添加到字典中,我將vale設置爲null ...我的錯誤。非常感謝! – user3084736

回答

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; 
     } 
    }​ 
+0

OP已經說過它解決了 –

+0

4分鐘之前,我發佈我的解決方案。 – jdweng

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是意想不到的副作用,當您將項目添加到字典中永遠不應該再發生,你可能會丟失一個列表初始化。

確保在向字典中添加新的myKey時,還要初始化列表。初始化字典時未初始化:

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