2014-07-23 106 views
0

我有一个词典作为另一个词典的价值部分结构的字段之一,以便课程可以包含多个类,每个类都有自己的老师和学生如下:.net词典里面词典:添加新项目到内部词典

Structure course 
    Dim description As String 
    Structure classs 
     Dim teacherCode As String 
     Dim studentIDs() As Integer 
    End Structure 
    Dim classes As Dictionary(Of String, classs) 'key=classCode 
End Structure 

Structure courseKey 
    Dim name As String 
    Dim yearLevel As Short 
End Structure 

Dim courses As New Dictionary(Of courseKey, course) 

我可以构建一个courseKey和使用空班组长子字典,courses.Add(courseKey,当然)创建一个空的课程字典项,但我不知道如何(或者的确,如果可能的话)创建具有非空类的子字典的新课程词典条目。我希望能够做到这样的事情来创建一个类,然后将它添加到课程中,但是得到一个NullReferenceException (即使课程(courseKey)引用适当的字典项目,并且当classCode是有效的字符串并且类是在它的数据班组长结构的有效实例)

courses(courseKey).classes.Add(classCode, classs) 

我失去了一些东西明显?我打算有这样的一些数据结构,有些在另一个字典中有多个字典。如果这是不可能的,也许有更好的办法?

+1

什么表达式为空?找出。我试图把它作为规范的NRE问题的一个重复来解决。我没有看到这种情况是如何特殊的。 – usr

回答

3

NullReferenceException always means the same thing。在这种情况下,您没有在您的course结构中实例化classes字典。

Dim classes As Dictionary(Of String, classs) 'key=classCode 

为了进行比较,你实例化的courses字典与New关键字。

Dim courses As New Dictionary(Of courseKey, course) 

通常你会创建classes字典以同样的方式,但在这种情况下,很structure,你也不会允许有一个结构的默认构造函数或成员初始化。

您需要在某处初始化字典,因此您有几个选项。也许最简单的将它包装成一个属性:

Private _classes As Dictionary(Of String, [class]) 

Public ReadOnly Property Classes As Dictionary(Of String, [class]) 
    Get 
     If _classes Is Nothing Then _classes = New Dictionary(Of String, [class])() 
     Return _classes 
    End Get 
End Property 

如果您的代码可能多线程的,你会想以不同的方式处理这个问题,但在course结构将初始化其私人提供Classes属性支持成员,如果它不存在。

(顺便说一句,我改了名字classsclass和包裹在方括号逃跑的名字。)

+0

太棒了,非常感谢。这正是我需要知道的。 – user3868872

1

你的类字典里面的课程班需要进行初始化。您可以在构造函数中执行此操作:

Structure course 

    ... 

    Public Sub New(description As String) 

     Me.description = description 
     classes = New Dictionary(Of String, classs) 

    End Sub 

    ... 

End Structure