2017-02-24 132 views
0

我已經走遍了互聯網尋找一個解決這個問題,但空例外仍然存在。基本上,我試圖將值添加到嵌套字典時,出現System.NullReferenceException錯誤。嵌套字典System.NullReferenceException在VB.net

這是我的代碼。

Public Dict1 as New Dictionary(Of Integer, Dictionary(Of String, String))() 'Tried with and without() 

Sub CreateDict(Length As Integer) 

    Dim key As Integer 
    Dim CmdName As String 
    Dim CmdValue As String 

    key = 0 
    CmdName = "UnusedCmd" 
    CmdValue = "NotAFolder,NotAFolder,NotAFolder,NotAFolder,NotAFolder,Read" 

    While key <= Length 
     Dim CmdDict As New Dictionary(Of String, String) 
     CmdDict.Add("Name", CmdName) 'Method 1 of Adding 
     CmdDict.Add("Command", CmdValue) 'Method 1 of Adding 
     'CmdDict("Name") = CmdName 'Method 2 of Adding Both seem to work as evidenced by msgbox 
     'CmdDict("Command") = CmdValue 'Method 2 of Adding Both seem to work as evidenced by msgbox 
     MsgBox(CmdDict("Name")) ' Returns UnusedCmd 
     MsgBox(CmdDict("Command"))' Returns NotAFolder,NotAFolder,NotAFolder,NotAFolder,NotAFolder,Read 
     MsgBox(key) 'Returns 1 
     Dict1.Add(key, CmdDict) 
     key = key + 1 
     CmdDict = Nothing 'Error Occurs whether or not this is commented out 
    End While 

End Sub 

注意此代碼是改編自我原來的項目,該項目是在VBA的Outlook 2016年我試圖重新適應這個代碼是一個Outlook插件。

我試圖用「=」替代「作爲」條款,我也試過

Dim CmdDict As Dictionary(Of String, String) = New Dictionary(Of String, String) 

對於兩個字典但這並沒有工作。我已經嘗試了所有我能想到的/請找到幫助。

它可能是與它是一個公共的字典?我看到有人使用公開辯論,他們的解決辦法是添加新的我不得不做的事情,否則不會創建任何對象。

編輯:

我只是想一個普通的字典作爲一個公共變量,它也失敗了。所以它似乎與嵌套無關。我將繼續研究公共對象問題。

編輯2:

只是試圖加入Dict1公共類仍然沒有工作。

Public Class GlobalVariables 
    Public Shared Dict1 As Dictionary(Of Integer, Dictionary(Of String, String)) = New Dictionary(Of Integer, Dictionary(Of String, String)) 
End Class 

這樣Dict1後進行了更新,GlobalVariables.Dict1

編輯3:

這段代碼是我根據我在Outlook VBA宏寫道:創建一個VSTO加載項中。我正在使用Visual Studio Community 2015. The location of the code is as follows

編輯4: 重複?我同意我認爲這是一個重複的答案,以及,但我不能在任何地方其他地方的答案是一個Sub內公衆創建對象移動到一個公共變量。但問題的其餘部分與其他人所認同的非常相似。

+1

該代碼運行得很好......你究竟在哪裏得到異常......什麼行......堆棧跟蹤說什麼? –

+0

的錯誤拋出該生產線是在Dict1.Add(鍵,CmdDict)不知道這是否會改變一切,但是這是正在運行的Outlook加載項裏內VSTO – Gibbs314

+0

這意味着在第一行沒有被執行...其中創建你有這個代碼嗎? –

回答

1

嘗試這種方式。

Public Dict1 as Dictionary(Of Integer, Dictionary(Of String, String)) 
Sub CreateDict(Length As Integer) 
    Dict1 = New Dictionary(Of Integer, Dictionary(Of String, String)) 
    <Rest of your code> 
End Sub 
+0

我試圖給你+1,因爲這回答了我的問題,但我剛剛加入,我沒有足夠的代表。再次感謝。 – Gibbs314

+0

JUst點擊它下面的複選標記..如果你看到它 –

+0

我仍然關心的是,雖然DIct1可能會關閉的範圍。看看它是否從您引用它的位置開始初始化很有意思。 –