我试图删除填充了对象的一个 arraylist的副本" DataPerLabel"。
DataPerLabel包含以下方法:getLabelname(),getLabelAdress()和getDataType()。
一些背景资料:
值labelname,labelAdress和dataType可以通过提交按钮在名为allData的arraylist中设置为1个对象。当第二次按下提交时,我想删除arraylist的那个对象。
图片:
我尝试过的一些代码:
if (submitButtonClicked == true) {
if (MessageBox.Show("This is item is already set. Do you want to delete?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) {
foreach(DataPerLabel item in allData) {
if (item.getDataType().Equals(dataType) && item.getLabelAdress().Equals(adress) && item.getLabelName().Equals(label)) {
allData.Remove(item);
} else {
}
}
} else {
//no
}
}
使用此代码我收到以下错误:未处理的类型' System.InvalidOperationException'发生在mscorlib.dll。
其他错误信息:收藏已更改。
答案 0 :(得分:3)
您正在尝试迭代allData列表,并且您还尝试修改相同的列表。您可以继续删除其他列表中的数据(例如:removeItems),然后您可以删除项目。我的意思是:
if (submitButtonClicked == true) {
if (MessageBox.Show("This is item is already set. Do you want to delete?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) {
List<DataPerLabel> removeItems = new List<DataPerLabel>();
foreach(DataPerLabel item in allData) {
if (item.getDataType().Equals(dataType) && item.getLabelAdress().Equals(adress) && item.getLabelName().Equals(label)) {
removeItems.Add(item);
} else {
}
}
} else {
//no
}
foreach(DataPerLabel removeItem in removeItems ){
allData.Remove(removeItem);
}
}
答案 1 :(得分:0)
//Here is just an example of list of array
List<object> obj = new List<object>();
obj.Add(5);
obj.Add(4);
obj.Add("we");
obj.Add(5);
List<object> objTodelete = new List<object>();
foreach (var item in obj)
{
int count = obj.Count(a => a.ToString() == item.ToString());
//for finding the dublicate occurence
if (count > 1)
{
//for removing that dublicated occurence.
object Dublicate = obj.Find(m => m.ToString() == item.ToString());
if (!objTodelete.Contains(Dublicate))
{
objTodelete.Add(Dublicate);
}
}
}
foreach (var itemDublicate in objTodelete)
{
obj.Remove(itemDublicate);
}
答案 2 :(得分:0)
正如OnurBulbul所说,由于尝试修改您正在迭代的列表,因此会出现异常。可以有很多不同的解决方案。我的建议是使用LINQ:
var sortedList = from item in allData
where !(item.getDataType().Equals(dataType) && item.getLabelAdress().Equals(adress) && item.getLabelName().Equals(label))
select item
它将为您创建一个包含所有已排序数据的新arrayList