帮助大家,我有一个积分列表列表积分=新列表(); ,我要做的是从列表中删除一些数据。我使用了一个列表框来查看它是否有效。这是我的代码:
points.Add(new PointF(50, 100));
points.Add(new PointF(50, 100));
points.Add(new PointF(200, 300));
points.Add(new PointF(100, 200 ));
points.Add(new PointF(50, 100));
points.Add(new PointF(100, 200));
points.Add(new PointF(200, 300));
points.Add(new PointF(100, 200));
points.Add(new PointF(200, 300));
listBox1.DataSource = points;
float[] sumofxandy = new float[points.Count()];
for (int x = 0; x < points.Count(); x++)
{
sumofxandy[x] = points.ElementAt(x).X + points.ElementAt(x).Y;
}
//code that removes data from list starts from here
float[] difference = new float[points.Count()]; //there is something wrong with this and I don't know what. It has no error but it doesn't make my list to be shown in the listbox.
for (int i = 0; i <= points.Count(); i++)
{
for (int j = 1; j <= points.Count(); j++)
{
difference[j] = sumofxandy[i] - sumofxandy[j];
if (difference[i] == 0)
{
points.RemoveAt(j);
MessageBox.Show("removed");
}
}
} // ends here
listBox2.DataSource = points;
当我删除从列表中删除数据的代码时,列表中的元素将显示在列表框中。帮助人
答案 0 :(得分:0)
您是否在if(difference[i] == 0)
中使用了错误的变量?
使用您的解决方案时,我在行points.RemoveAt(j);
difference[j] = sumofxandy[i] - sumofxandy[j];
if (difference[i] == 0)
{
points.RemoveAt(j);
MessageBox.Show("removed");
}
当行if(difference[i] == 0)
更改为:
if(difference[j] == 0)
然后代码执行成功,listbox2中包含3个项目。
编辑:
正如@wdosanjos所提到的那样,你应该使用<
而不是<=
进行循环,因为你从0开始计数,而不是1.最后一个元素实际上位于Count - 1的位置,因为该列表为零索引。
编辑:
当我将循环更改为:(注意<=
到<
的更改时,它不会抛出异常。)
for (int i = 0; i < points.Count(); i++)
{
for (int j = 1; j < points.Count(); j++)
{
difference[j] = sumofxandy[i] - sumofxandy[j];
if (difference[i] == 0)
{
points.RemoveAt(j);
MessageBox.Show("removed");
}
}
} // ends here
这会返回两个元素。
答案 1 :(得分:0)
尝试更改for
循环,如下所示(从<=
到<
)。我认为你得到了一个隐藏的IndexOutOfBoundsException
。
for (int i = 0; i < points.Count(); i++)
{
for (int j = 1; j < points.Count(); j++)
答案 2 :(得分:0)
请注意,您正在修改正在迭代的完全相同的列表。这可以轻松删除所有点。您最好为要删除的点创建一个新列表:
//code that removes data from list starts from here
List<PointF> pointsToRemove = new List<PointF>();
float[] difference = new float[points.Count()];
for (int i = 0; i <= points.Count(); i++)
{
for (int j = 1; j <= points.Count(); j++)
{
difference[j] = sumofxandy[i] - sumofxandy[j];
if (difference[i] != 0)
{
pointsToRemove.Add(points[j]);
MessageBox.Show("removed");
}
}
}
listBox2.DataSource = points.Except(pointsToRemove).ToList();