C# 从列表框中删除项目

C# 从列表框中删除项目,c#,listbox,C#,Listbox,在Windows窗体应用程序中,我有一个包含重复项的列表框(例如有项:1,1,2,2,3,3,4,4)。我正在使用此代码删除所有其他项目: for (int i = 0; i < ItemsCount/2; i++) { listBox1.Items.Remove(listBox1.Items[ItemsCount - 2 * i - 1]); } for(int i=0;i

在Windows窗体应用程序中,我有一个包含重复项的列表框(例如有项:1,1,2,2,3,3,4,4)。我正在使用此代码删除所有其他项目:

for (int i = 0; i < ItemsCount/2; i++)
{
     listBox1.Items.Remove(listBox1.Items[ItemsCount - 2 * i - 1]);
}
for(int i=0;i
它删除索引号为7、5、3和1的项。结果是包含以下项的列表框:1、2、3、4。 直到现在一切都正常

但是,当列表框包含项:1,1,2,2,1,1,2,2时,结果应为列表框:1,2,1,2。 问题是,结果是1,1,2,2。 您知道问题出在哪里吗?

您可以使用运算符选择数组中所有奇数或偶数索引元素,如下所示

public static void Main()
{
    //var items = new List<int>(){1,1,2,2,3,3,4,4};
    var items = new List<int>(){1,1,2,2,1,1,2,2};
    
    // select all elements at the odd index of an array. To get the even indexed item, use 'index % 2 == 0'
    var updatedItems = items.Where((item, index) => index % 2 != 0);
    Console.WriteLine(string.Join(',', updatedItems));
}

可能让您感到困惑的是,该方法接受要删除的项的值,然后删除第一次出现的项

相反,如果要删除特定索引处的项,则应使用该方法,该方法将获取要删除的项的索引:

for (int i = 0; i < ItemsCount/2; i++)
{
     listBox1.Items.RemoveAt(ItemsCount - 2 * i - 1);
}

设置断点并在调试器中逐步执行代码以查看发生的情况。如果可以,为什么不使用%2将列表大小删除50%?请指定您的环境:WPF、WinForms、Xamarin、UWP、ASP.NET、Unity…您不检查这些项是否真的重复。。。。只是基于odd和evenOP的选择,但他们没有注意到重复数据消除。他只是说“我正在使用此代码删除所有其他项目”,这正是上面的代码所做的。此外,他还提到预期结果应该是1,2,1,2(有重复项)。@DA预期结果是
{1,2,1,2}
,这正是本答案第一部分所述的每一项。完美!非常感谢你的帮助。回答得很好@Rufus L
for (int i = 0; i < ItemsCount/2; i++)
{
     listBox1.Items.RemoveAt(ItemsCount - 2 * i - 1);
}