我在Windows应用程序中使用了ListBox。我从WCF服务器获得了变量iplist
。
之后我在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);
}
}
}
}
答案 0 :(得分:1)
在迭代集合时,无法添加枚举(在本例中为列表框)。
您可能需要以下内容:
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);
}
}
}
答案 1 :(得分:0)
你的问题正是詹姆斯所说的,你不能在迭代集合时添加枚举。虽然你也可以用这种方式解决它。 (我假设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));
}
}
答案 2 :(得分:0)
如果你读了你的代码,那可能不是你想要的。 如果IP地址不存在,您想将其添加到列表中吗?
for (int i = 0; i < listBox1.Items.Count; i++)
{
if (!listBox1.Items[i].ToString().Contains(pc.IPAddress))
{
listBox1.Items.Add(pc.IPAddress);
}
}
您现在所做的是循环显示列表框中的项目。如果某个项目不包含ipaddress,您将其添加到列表框中。 你想要的是当它没有出现在整个列表框中时添加ipaddress。因此:
//IPAddress is a string?
if (!listBox1.Items.Contains(pc.IPAddress))
{
listBox1.Items.Add(pc.IPAddress);
}