共享字典变量不保存我的对象

Shared Dictionary variable does not save my objects

我正在为我的 class 做作业,我们在那里学习使用词典。我必须将订单对象保存到字典中。当我调试时它给了我 NullReferenceException 订单创建正确,只是不会分配给字典,然后我必须使用字典将订单显示到列表框

Public Class MainForm

Public Shared orders As Dictionary(Of Integer, Order)

Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Dim aOrder As Order
        'order created for Joe Jones
        aOrder = New [Order](#05/1/2017#, "Joe Jones")
        Dim sillyPuttyItem As New Item("silly putty", 3.95, 10, 2.99)
        Dim rubiksItem As New Item("Rubik's Cube", 9.1)
        aOrder.AddItem(sillyPuttyItem)
        aOrder.AddItem(rubiksItem)

        orders.Add(1, aOrder) 

        aOrder = New [Order](#12/5/2017#, "Kathy Klum")
        Dim fidgetItem As New Item("Fidget Spinner", 6.79, 5, 5.98)
        Dim bubblesItem As New Item("bottle of bubbles", 0.99)
        aOrder.AddItem(fidgetItem)
        aOrder.AddItem(bubblesItem)
        Order.orders.Add(2, aOrder)

        For Each order In orders
            lstOrders.Items.Add(orders.ToString())



Option Strict On
Option Explicit On

Public Class Order
    Public Shared orders As Dictionary(Of Integer, Order)
    Public Shared NEXT_ORDER_NUMBER As Integer = 1234
    Private Const SALES_TAX_RATE As Double = 0.08

    Private mOrderDate As DateTime
    Private mOrderNumber As Integer
    Private mName As String
    Private mQuantityOrdered As Integer
    Private mItems As New List(Of Item)

    Public Sub New(ByVal pDate As DateTime, ByVal pName As String)
        mOrderDate = pDate
        mName = pName
    End Sub

    Public ReadOnly Property OrderDate As DateTime
        Get
            Return mOrderDate
        End Get
    End Property

    Public ReadOnly Property OrderNumber As Integer
        Get
            Return mOrderNumber
        End Get
    End Property

    Public ReadOnly Property Name As String
        Get
            Return mName
        End Get
    End Property
            Next


Option Strict On
Option Explicit On


Public Class Item

    Private itemName As String
    Private itemPrice As Double
    Private bulkQuantity As Integer
    Private bulkPrice As Double

    Private mquantityOrdered As Integer

    Public ReadOnly Property QuantityOrdered As Integer
        Get
            Return mQuantityOrdered
        End Get
    End Property

    Public Sub New(ByVal pItemName As String, ByVal pPrice As Double)
        itemName = pItemName
        itemPrice = pPrice
        ' mquantityOrdered = pQuantity
    End Sub

    Public Sub New(ByVal pItemName As String, ByVal pPrice As Double,
                   ByVal pBulkQuantity As Integer, ByVal pBulkPrice As Double)

        bulkQuantity = pBulkQuantity
        bulkPrice = pBulkPrice
        '  mquantityOrdered = pQuantity
    End Sub

    Public Sub New(ByVal pItem As Item)
        itemName = pItem.Name
        itemPrice = pItem.itemPrice
        bulkQuantity = pItem.bulkQuantity
        bulkPrice = pItem.bulkPrice
    End Sub

    Public Sub New(ByVal pItem As Item, ByVal pQuantity As Integer)
        Me.New(pItem)
        mquantityOrdered = pQuantity
    End Sub

这个

Public Shared orders As Dictionary(Of Integer, Order)

声明类型 Dictionary(Of Integer, Order) 的共享字段 orders。它实际上并没有创建它。我想您正在寻找:

Public Shared orders As New Dictionary(Of Integer, Order)

注意那里的 "New"。

I'm now getting the exception when adding the second order to the dictionary, but it takes the first one

您的第二次添加是添加到不同的字典。第一个正在做:

orders.Add(1, aOrder) 

第二个正在做:

Order.orders.Add(2, aOrder)

Order class 似乎还有另一个共享词典,也是 Nothing。您应该将 New Dictionary 用于订单中的词典,或者您可能打算使用 orders.Add(2, aOrder) 而不是使用 Orders.

中的共享字段