我有一个类型为UInteger
的键的字典,值为List(Of Session)
,其中(公共)类Session
包含几个变量和一个构造函数(Public Sub New(。 ..))。
我的Session
课程中的一些变量是:
Private count As Integer
Private StartDate As Date
Private Values As List(Of Integer)
以及一些方法,如:
Friend Sub Counter(ByVal c as Integer)
count += c
End Sub
向Dictionary添加值没有问题:
Dim Sessions As New List(Of Session)
Dim dict As New Dictionary(Of Integer, List(Of Sessions))
然后一些代码填充Sessions中的几个Session对象(此处未显示),然后:
dict.Add(17, Sessions) ''#No problem
Sessions.Clear()
Sessions = dict(17) ''#This doesn't return anything!
即使代码未返回任何错误,Sessions对象仍为空。 我的课程会被compex存储在一个字典中吗?
答案 0 :(得分:4)
那是因为Sessions
变量是对数据的引用,所以当你将它添加到字典中时,字典中的那个变量指向同一个东西。因此,当您执行Sessions.Clear()
时,您将清除实际数据,因为两个引用都指向同一位置,现在它们都不会保存数据。
如果您确实希望拥有两个不同的数据副本,this讨论可能会有所帮助。
答案 1 :(得分:1)
这些线条对我来说似乎很可疑:
Dim Sessions As New List(Of Session)
' Your Sessions variable has the same name as a class? '
Dim dict As New Dictionary(Of Integer, Sessions)
' You are adding a List(Of Session) to a Dictionary(Of UInteger, Sessions)? '
' This could only be legal if List(Of Session) derived from your Sessions class '
' (which is obviously not true). '
dict.Add(17, Sessions)
这也让你感到困惑在于你的意思:
Sessions.Clear()
Sessions = dict(17) 'This does not return anything!'
通过“不返回任何内容”,您的意思是它返回 Nothing
或为空的List(Of String)
吗?在后一种情况下,这是预期的:你刚刚清除了你正在谈论的列表。在前一种情况下,这很奇怪,我们需要更多细节。