Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление из коллекции при Dictionary, исключение при изменении коллекции 
V
    Опции темы
DENSHER
Дата 12.5.2012, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 3.3.2010

Репутация: нет
Всего: нет



Подскажите пожалуйста, как правильно удалить из коллекции ключ со значением.
Читал, что нужно использовать заместо 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



Это сообщение отредактировал(а) DENSHER - 13.5.2012, 00:33
PM MAIL   Вверх
diadiavova
Дата 12.5.2012, 19:35 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Код

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



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
DENSHER
Дата 12.5.2012, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 3.3.2010

Репутация: нет
Всего: нет



Странно... Все равно ругается на: коллекция была изменена; невозможно выполнить операцию перечисления.
Может я что-то не так сделал. Заменил строчку удаления, на выше добавленую.
PM MAIL   Вверх
diadiavova
Дата 12.5.2012, 21:49 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



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


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
DENSHER
Дата 12.5.2012, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 3.3.2010

Репутация: нет
Всего: нет



цикл(ы) нужен: для просмотра колекции, поиска в листвью имен и после нахождения имен, по группе выставить цвет.
PM MAIL   Вверх
diadiavova
Дата 12.5.2012, 22:32 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



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


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
DENSHER
Дата 12.5.2012, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 3.3.2010

Репутация: нет
Всего: нет



diadiavova, вот про Tag просто при огромнеещее спасибо. Действительно проще и удобнее.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0978 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.