Могут ли объекты в объектах быть постоянными? (vb .net) - PullRequest
2 голосов
/ 15 декабря 2009

Dim BigCollection As New Collection Dim SmallCollection как новая коллекция SmallCollection.Add ("Hello World") BigCollection.Add (SmallCollection)

MsgBox(BigCollection(1)(1)) 'shows "Hello World
SmallCollection.Clear()
MsgBox(BigCollection(1)(1)) 'ERROR (Collection is empty)

Я хочу, чтобы после того, как я поместил что-то в BigCollection, оно осталось там, я не хочу, чтобы это было изменяемым извне. Я хочу быть в состоянии очистить SmallCollection, но он не должен очищаться в BigCollection. Есть идеи? Может быть, это плохой подход, я здесь еще не гуру .net;)

Спасибо!

1 Ответ

2 голосов
/ 15 декабря 2009

Если вы хотите, чтобы коллекция не изменялась, вы должны выставить ее через ReadOnlyCollection(Of T). Однако создание одного из стандартного типа Collection имеет довольно неловкий синтаксис.

Dim completeSmall As New ReadOnlyCollection(Of Object)(SmallCollection.Cast(Of Object))

Было бы проще, если бы вы начали с List(Of Object) вместо Collection. Окончательный синтаксис немного проще для чтения

Dim SmallCollection As New List(Of Object)()
...
Dim completeSmall As New ReadOnlyCollection(Of Object)(SmallCollection)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...