Добавить значение в список из списка значений без использования цикла for - PullRequest
1 голос
/ 19 февраля 2010

Я использовал ListBox в своем приложении для Windows.Я получил переменную iplist от сервера WCF.

После этого я добавил этот список в свой ListBox, но он выдал ошибку: «Коллекции изменены, перечисление может не выполняться».Как я могу решить эту проблему?

Мой код:

foreach (ClsPC pc in iclsobj.GetPC())
{
    if (listBox1.Items.Count == 0)
    {
         listBox1.Items.Add(pc.IPAddress);
    }
    else
    {
        for (int i = 0; i < listBox1.Items.Count; i++)
        {
            if (!listBox1.Items[i].ToString().Contains(pc.IPAddress))
            {
                listBox1.Items.Add(pc.IPAddress);
            }
         }
    }
}

Ответы [ 3 ]

1 голос
/ 19 февраля 2010

Вы не можете добавить к перечислению, в данном случае ваш список, пока вы перебираете коллекцию.

Вы, вероятно, хотите что-то вроде:

using System.Linq;
...

foreach (ClsPC pc in iclsobj.GetPC()) 
{     
    if (listBox1.Items.Count == 0) 
    { 
        listBox1.Items.Add(pc.IPAddress); 
    } 
    else 
    { 
        if (!listBox1.Items.Any(i => String.Compare(i.ToString(), pc.IPAddress, true) == 0))
        {
           listBox1.Items.Add(pc.IPAddress); 
        }
   } 
}
0 голосов
/ 19 февраля 2010

Если вы читаете свой код, это, вероятно, не то, что вы хотите.Вы хотите добавить IP-адрес в список, если он не существует?если элемент не содержит ipaddress, вы добавите его в список.То, что вы хотите, это добавить ipaddress, когда он не появляется весь список.Поэтому:

//IPAddress is a string?
if (!listBox1.Items.Contains(pc.IPAddress))
{
 listBox1.Items.Add(pc.IPAddress);
}
0 голосов
/ 19 февраля 2010

Ваша проблема именно в том, что говорит Джеймс, вы не можете добавить к перечислению, просматривая коллекцию.Хотя вы также можете решить это таким образом.(Я предполагаю, что pc.IPAddress - это строка, если это что-то еще, просто переключите тип.)

foreach (ClsPC pc in iclsobj.GetPC())
{
    if (listBox1.Items.Count == 0)
    {
         listBox1.Items.Add(pc.IPAddress);
    }
    else
    {
        var toAdd = new List<string>();
        for (int i = 0; i < listBox1.Items.Count; i++)
        {
            if (!listBox1.Items[i].ToString().Contains(pc.IPAddress))
            {
                toAdd.Add(pc.IPAddress);
            }
         }
         toAdd.ForEach(item => listBox1.Items.Add(item));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...