类类型是引用类型。因此,这会将 3 个对同一对象的引用添加到列表中:
Dim AllEstimatesReturn As New List(Of QuoteReturnData)
Dim TempQuoteReturnFromExecuteEstimate As New QuoteReturnData
AllEstimatesReturn.Add(TempQuoteReturnFromExecuteEstimate)
AllEstimatesReturn.Add(TempQuoteReturnFromExecuteEstimate)
AllEstimatesReturn.Add(TempQuoteReturnFromExecuteEstimate)
每次都创建新对象
Dim AllEstimatesReturn As New List(Of QuoteReturnData)
AllEstimatesReturn.Add(New QuoteReturnData())
AllEstimatesReturn.Add(New QuoteReturnData())
AllEstimatesReturn.Add(New QuoteReturnData())
或者实现一个克隆的方法QuoteReturnData
:
Class QuoteReturnData
' Creates an exact copy of the current QuoteReturnData object.
Public Function SwallowCopy() As QuoteReturnData
Return DirectCast(Me.MemberwiseClone(), QuoteReturnData)
End Function
End Class
MemberwiseClone
继承自我们需要的东西,Object
并且做我们需要的东西;但是,此方法是受保护的,只能从类中调用。因此,我们将它包装到一个公共函数中。
现在你可以这样做
Dim AllEstimatesReturn As New List(Of QuoteReturnData)
Dim TempQuoteReturnFromExecuteEstimate As New QuoteReturnData
AllEstimatesReturn.Add(TempQuoteReturnFromExecuteEstimate.SwallowCopy())
AllEstimatesReturn.Add(TempQuoteReturnFromExecuteEstimate.SwallowCopy())
AllEstimatesReturn.Add(TempQuoteReturnFromExecuteEstimate.SwallowCopy())
请注意,这只会创建一个浅克隆。如果对象包含对其他对象的引用,则不会自动克隆这些其他对象。由您决定这是否可行,或者您是否需要深度克隆。