共享字典变量不保存我的对象
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
.
中的共享字段
我正在为我的 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
.