2017-02-24 28 views
0

私はこの問題の解決策を探してインターネットを精査しましたが、null例外が残ります。ネストされた辞書に値を追加しようとすると、基本的にSystem.NullReferenceExceptionエラーが発生します。VB.netのネストされた辞書System.NullReferenceException

ここに私のコードです。

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 

注このコードは、私は見通しのアドインになるこのコードをreadaptしようとしていたOutlook 2016用のVBAにいた私の元のプロジェクトから適応されました。

私は「=」と「として」用語を交換しようとしていると私はまた、両方の辞書については

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

を試してみましたが、これは動作しませんでした。私は思うことができるすべてを試しました/助けてください。

パブリック辞書と関係がありますか?他の誰かがパブリック・ディクショナリを使っているのを見ました。彼らは解決策です。新しいものを追加することでした。そうしなければ、オブジェクトは作成されませんでした。

EDIT:

私はちょうどパブリック変数として、定期的な辞書を試してみましたが、それは同様に失敗しました。だから、ネストされていることとは関係がないようです。私は公開オブジェクトの問題を調べ続けます。

EDIT 2:

ちょうどまだ機能していないパブリック・クラスにDict1を追加しようとしました。この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 

がGlobalVariables.Dict1

EDIT 3に更新されました:

このコードは、私は私がOutlook VBAで書いたマクロに基づいて作成しておりますことをVSTOアドイン内にあります。 Visual Studio Community 2015を使用しています。The location of the code is as follows

編集4: 重複していますか?私はこれも重複した回答だと思っていましたが、私は、Create Objectをパブリック変数のPublicからSub内に移動する答えがどこにもないことはできませんでした。しかし、残りの質問は他の人たちと非常によく似ています。

+1

そのコードはちょうどいいです...どこに例外がありますか...どの行...スタックトレースは何を言いますか? –

+0

エラーがスローする行はDict1.Add(key、CmdDict)です。変更されても、これはVSTO内で作成されたOutlook Addin内で実行されているかわかりません – Gibbs314

+0

これは最初の行が実行されていないことを示します... WHEREこのコードはありますか? –

答えて

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のスコープをどうにかしていなくても構いません。参照先から初期化されているかどうか調べるのは面白いです。 –

関連する問題