Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Удаление из коллекции при Dictionary


Автор: DENSHER 12.5.2012, 19:19
Подскажите пожалуйста, как правильно удалить из коллекции ключ со значением.
Читал, что нужно использовать заместо For Each просто For, но так и не понял как.
Пример:
Код

Public Class Form1

    Private Dictionary As New Dictionary(Of String, String)

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) _
        Handles MyBase.Load
        ListView1.Items.Add("Имя1")
        ListView1.Items(0).SubItems.Add("A")
        ListView1.Items.Add("Имя2")
        ListView1.Items(1).SubItems.Add("B")
        Dictionary.Add("Имя1", "А")
        Dictionary.Add("Имя2", "B")
        Dictionary.Add("Имя3", "А")
    End Sub

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) _
        Handles Button1.Click
        For Each pair In Dictionary
            Dim name As String = pair.Key
            Dim group As String = pair.Value
            Dim lvi As New ListViewItem
            For i As Integer = 0 To Dictionary.Count - 1
                lvi = ListView1.FindItemWithText(name, True, 0)
                If Not lvi Is Nothing Then
                    If group = "A" Then
                        ListView1.Items().Item(lvi.Index).ForeColor = Color.RoyalBlue
                    ElseIf group = "B" Then
                        ListView1.Items().Item(lvi.Index).ForeColor = Color.Silver
                    End If
                Else
                    Dictionary.Remove(name) ' как удалить из коллекции без исключения?
                End If
            Next
        Next ' Коллекция была изменена; невозможно выполнить операцию перечисления.
    End Sub

End Class


Автор: diadiavova 12.5.2012, 19:35
Код

If Dictionary.ContainsKey(name) Then
    Dictionary.Remove(name)

Автор: DENSHER 12.5.2012, 19:56
Странно... Все равно ругается на: коллекция была изменена; невозможно выполнить операцию перечисления.
Может я что-то не так сделал. Заменил строчку удаления, на выше добавленую.

Автор: diadiavova 12.5.2012, 21:49
DENSHER, Изменять коллекцию в фориче нельзя, я тебе показал решение вопроса, который ты сформулировал, для чего тебе там циклы понабились ты не объяснил. Опиши, что ты хочешь сделать более подробно, тогда будет о чем говорить.

Автор: DENSHER 12.5.2012, 22:11
цикл(ы) нужен: для просмотра колекции, поиска в листвью имен и после нахождения имен, по группе выставить цвет.

Автор: diadiavova 12.5.2012, 22:32
DENSHER, я правильно понимаю, словарь ты используешь только для хранения информации об элементах листвью?  Не проще ли хранить ее в самих элементах?  У них есть свойство Group, ну и если не подходит, то универсальное свойство Tag, в которое можно поместить вообще любую информацию. И обработка будет проще, да и  лишние объекты плодить не придется.

Автор: DENSHER 12.5.2012, 23:00
diadiavova, вот про Tag просто при огромнеещее спасибо. Действительно проще и удобнее.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)