无法从.NET中的字典中获取List(Of <my class =“”>)?</my>

时间:2010-06-11 13:32:39

标签: vb.net list dictionary

我有一个类型为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存​​储在一个字典中吗?

2 个答案:

答案 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) 吗?在后一种情况下,这是预期的:你刚刚清除了你正在谈论的列表。在前一种情况下,这很奇怪,我们需要更多细节。