我正在尝试从ListBox中删除特定项目,但是我收到了一个强制转换错误。
它似乎不喜欢我将ListBox中的项称为string
项的事实。
if (CheckBox1.Checked == true)
{
foreach (string item in ListBox1.Items)
{
WebService1 ws = new WebService1();
int flag = ws.callFlags(10, item);
if (flag == 1)
{
ListBox1.Items.Remove(item);
}
}
}
错误 -
Unable to cast object of type 'System.Web.UI.WebControls.ListItem' to type 'System.String'.
我该如何解决这个问题?
修改
我的问题是,当我更改(ListItem item in ListBox1.Items)
(我曾尝试过)的方法时,行int flag = ws.callFlags(10, item);
会中断,因为网络服务正在寻求专门接收string
。然后给出错误 -
Error 2 Argument 2: cannot convert from 'System.Web.UI.WebControls.ListItem' to 'string'
Error 1 The best overloaded method match for 'testFrontEnd.WebService1.callFlags(int, string)' has some invalid arguments
答案 0 :(得分:2)
将您的删除更改为:
ListBox1.Items.Remove(ListBox1.Items.FindByName(item));
答案 1 :(得分:2)
你正在迭代ListItems
,所以你应该这样做:
foreach( ListItem item in ListBox1.Items){
WebService1 ws = new WebService1();
int flag = ws.callFlags(10, item.Text); // <- Changed to item.Text from item
if (flag == 1)
{
ListBox1.Items.Remove(item); // <- You'll have an issue with the remove
}
}
当您尝试从Remove
Item
ListBox
时,您也会收到错误,因为您不能从Enumerable
移除您正在迭代。天真地,您可以将foreach
循环切换为for
循环来解决该问题。
此代码应该可以删除并修复“无法投射”错误。
for(int i = 0; i < ListBox1.Items.Count; i++)
{
ListItem item = ListBox1.Items[i];
WebService1 ws = new WebService1();
int flag = ws.callFlags(10, item.Text);
if (flag == 1)
{
ListBox1.Items.Remove(item);
}
}
最后一点;你的WebService1
似乎是一个自定义类,让它实现IDisposable
接口并将其包装在using
子句中可能是一个好主意,这样你就可以确定它是使用后妥善处理。
public class WebService1 : IDisposable { // ...
using (WebService1 ws = new WebService1())
{
// Code from inside your for loop here
}
答案 2 :(得分:0)
ListBox1.Items返回ListItem
个对象的集合。您希望item
属于ListItem
类型,然后使用item.Text
,或者item.Value
。