Не могу получить список (из) из словаря в .NET? - PullRequest
0 голосов
/ 11 июня 2010

У меня есть словарь с ключом типа UInteger и значением List(Of Session), где (Public) класс 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

Нет проблем с добавлением значенийв словарь:

Dim Sessions As New List(Of Session)
Dim dict As New Dictionary(Of Integer, List(Of Sessions))

затем некоторый код для заполнения пары объектов Session в сеансах (здесь не показан) и затем:

dict.Add(17, Sessions) ''#No problem
Sessions.Clear()
Sessions = dict(17) ''#This doesn't return anything!

Объект Sessions пуст, даже есликод не вернул никакой ошибки.Моя классная сессия обязательна, чтобы быть сохраненной в Словаре?

Ответы [ 2 ]

4 голосов
/ 11 июня 2010

Это потому, что переменная Sessions является ссылкой на данные, поэтому, когда вы добавляете ее в словарь, переменная в словаре указывает на то же самое. Поэтому, когда вы делаете Sessions.Clear(), вы очищаете фактические данные, и поскольку обе ссылки указывают на одно и то же место, ни одна из них теперь не содержит данные.

Если вы действительно хотите иметь две разные копии данных, это обсуждение может быть полезным.

1 голос
/ 11 июня 2010

Эти строки кажутся мне подозрительными:

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)?В последнем случае это ожидаемо: вы только что очистили тот список, о котором говорите.В первом случае это очень странно, и нам понадобится больше деталей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...