2014-07-23 1 views
0

사전에 다른 사전의 값 부분 구조 필드 중 하나가 포함되어있어 코스에 여러 개의 클래스가 포함될 수 있으며 각 클래스에는 자체 교사가 있고 아래 학생 : 나는 courseKey을 구성하고 courses.Add (courseKey, 물론)와 빈 클래스의 사용 하위 사전을 사용하여 빈 코스 사전 항목을 작성,하지만 난 방법을 작동하지 않을 수 있습니다.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) 

(또는 가능하다면) 비어 있지 않은 클래스 서브 사전으로 새로운 코스 사전 항목을 생성 할 수 있습니다. 클래스를 생성하고 코스에 추가하기 위해 이와 같은 작업을 수행 할 수 있지만 NullReferenceException을받을 수 있어야합니다. (course (courseKey)가 해당 사전 항목을 참조하는 경우에도 classCode가 유효한 문자열이고 클래스가 거기에 데이터가있는 클래스의 사용 구조의 유효한 예) : 내가 뭔가를 분명 실종

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

건가요? 나는이 같은 몇 가지 데이터 구조를 가질 계획이었고, 다른 사전에는 여러 개의 사전이 포함되어 있습니다. 이것이 가능하지 않다면 아마도 더 좋은 방법이있을 것입니다.

+1

null이 무슨 표현식입니까? 찾아. 나는 이것을 표준적인 NRE 질문의 사본으로 닫으려고한다. 나는이 사건이 어떻게 특별한지 보지 않을 것이다. – usr

답변

3

NullReferenceException always means the same thing. 이 경우 course 구조의 classes 사전을 인스턴스화하지 않았습니다.

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

는 비교를 위해, 당신은 New 키워드로 courses 사전을 인스턴스화했습니다.

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 속성을 제공합니다 지지 부재가 아직없는 경우.

은 (덧붙여, 나는 class에 이름 classs을 변경하고 이름을 탈출 대괄호에 싸서.) 코스 클래스가 초기화 될 필요가 내부

+0

대단히 고마워요. 이것은 정확하게 내가 알아야 할 필요가있는 것입니다. – user3868872

1

수업 사전. 생성자 내에서이 작업을 수행 할 수 있습니다.

Structure course 

    ... 

    Public Sub New(description As String) 

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

    End Sub 

    ... 

End Structure