【问题标题】:How can I remove an item from a listbox without using "Contains"?如何在不使用“包含”的情况下从列表框中删除项目?
【发布时间】:2014-10-07 18:12:42
【问题描述】:

我有这个代码:

for (int i = listboxWork.Items.Count-1; i > -1; i--) 
{
    if (listboxWork.Items[i].Contains(tblSent))
    {
        listboxWork.Items.RemoveAt(i);
    }
}

...我从 here 派生而来,但是我的 .NET 旧版本(或者可能是我的 .NET(Compact Framework)的弱版本是问题所在)不包含“包含”。

我认为我可以将那行替换为:

if (listboxWork.Items[i].ToString().IndexOf(tblSent) > -1)

...但我并不太相信这是最好的方法。有没有更容易接受的方式?

【问题讨论】:

  • 数组可能没有包含运算符,但您确定列表对象没有吗?您可以反转列表并执行 foreach。

标签: c# listbox contains indexof listboxitems


【解决方案1】:

Items 是对象的集合,因此您需要将正在使用的元素转换为字符串才能使用Contains:

if (listboxWork.Items[i].ToString().Contains(tblSent))

编辑:由于这是 CompactFramework(我最初在帖子中未能识别,因此正确的解决方案是使用已识别的 String.IndexOf。

这是一个完全可以接受的机制,但如果 CF 支持它,我强烈建议使用不区分大小写的比较,尤其是在评估中涉及任何用户输入时:

if (x.Items[0].ToString().ToLower().IndexOf(tblSent.ToLower()) != -1)

【讨论】:

  • 这是明智的,但在我坚持使用的这个包含挑战的 .NET 版本中,即使这样做(正确的方式)也是不可能的。
  • @B.ClayShannon:我之前忽略了 CF 问题;您可能需要调整问题中的标签以包含此内容。我已经用更多信息更新了我的答案。
  • 嗯,这令人失望。我忘记了 CF 的限制。最后的方法(如果比较确实涉及用户输入)是在执行比较之前将所有内容转换为小写(或大写)。我已经用这种方法更新了答案。
  • 是的; CF 代表 Cheesy 和 Frustrating。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多