所以我想删除列表框中的空白项目,就像空白一样,所以我有这个代码。但是编译器给了我一个错误
for (int i = 0; i < listBox2.Items.Count; i++)
{
if (listBox2.Items[i].ToString = " "){//ERROR*
listBox2.Items.RemoveAt(i);
}
}
*无法将方法组'ToString'转换为非委托类型'bool'。你打算调用这个方法吗?
答案 0 :(得分:9)
ToString
是一种方法,因此您需要它ToString()
,并且使用两个等号[{1}}执行相等比较,而不是一个。一个等号是分配。
话虽如此,要迭代你的收藏并按索引删除项目,你会想要反过来。您会注意到,当您移除项目时,您的项目数量将明显下降,因此您的循环将不会像您认为的那样。所以去做这样的事情:
==
答案 1 :(得分:3)
仅在列表框中删除所有空项目(行)。使用VS 2003 framework 1.1或VS 2005 framework 2.0或VS 2008 framework 3.5,此代码适用于您:
int i = 0;
while (listBox1.Items.Count - 1 >= i)
{
// convert listbox object to string so we can use Trim() for remove all space(whitespace char before and after the word
//then check if remain character or there is nothing at all whatever whitspace char or any space
if (Convert.ToString(listBox1.Items[i]).Trim() == string.Empty)
{
//if the line became blank after Trim() apply so the line is empty and condition is true
listBox1.Items.RemoveAt(i);
//decrement i because we remove line and the following line will take his place and his index number
i -= 1;
}
i += 1;
}
请记住,如果单击新空白行中的空格键或制表符,则会创建字符调用空白字符,而不是空行。
如果我们将以下行添加到列表框
,请理解我的意思 listBox1.Items.Add(" IN ");//click tab before and after IN
listBox1.Items.Add(""); //blank line no whitespace char or any character
listBox1.Items.Add(" THE"); //click spacebar twice before THE
listBox1.Items.Add(" "); //click tab once
listBox1.Items.Add(" NAME "); //click spacebar after and before
listBox1.Items.Add(" OF "); //click tab before and spacebar after
listBox1.Items.Add(" ");//click tab twice
listBox1.Items.Add("ALLAH"); //no space after or before
唯一符合条件String.Empty
而不适用Trim()
的行是第2行,但当我们使用Trim()
第4行和第7行时,它们就像第2行空白行没有空白字符所以第2个(已空行或空行无需修改),第4个,第7个(现在在使用修剪后变为空白行),它们将从列表框中删除。
结果将是:
IN
THE
NAME
OF
ALLAH
答案 2 :(得分:2)
尝试
if (String.IsNullOrWhiteSpace(listBox2.Items[i].ToString())){
然而!由于您要删除项目,这意味着枚举器将无法正常工作。如果您的列表框项目是
然后您的代码将:
IndexOutOfRangeException
。 (因为没有第2项)相反,请尝试
List<int> itemsToRemove = new List<int>(); // using System.Collections.Generic
for (int i = 0; i <= listBox2.Items.Count; i++)
{
if (String.IsNullOrWhiteSpace(listBox2.Items[i].ToString())){
itemsToRemove.Append(i);
}
}
foreach (int i in itemsToRemove){
listBox2.Items.RemoveAt(i);
}
答案 3 :(得分:0)
你应该试试这个
> for (int i = 0; i <= listBox2.Items.Count; i++)
> {
> if (listBox2.Items[i].ToString() == "") //Remove ' ' space
> listBox2.Items.RemoveAt(i);
> }
> }
答案 4 :(得分:0)
看起来你是个VB人。 在基于C语言(如C#)中,(与VB不同)有两个不同的运算符用于分配东西和检查东西(我不知道真正的术语)。要检查两个东西是否相等,请使用double =(==)。那么你在if语句中所做的就是为列表框项目分配“”。这显然不会返回一个布尔值(如果需要的话)。在pre-c#语言中,这可能导致真正难以发现的错误,因为没有警告。
在VB中,您可以在不使用括号的情况下调用方法。在c#中,总是需要它们。编译器会认为您希望将方法的地址存储在委托中,如果将其遗漏(例如在VB.Net中使用AddressOf)。当你做出这两个改变时(事实上,就像安东尼·佩格拉姆所说的那样向后循环),一切都会好起来的。