无法将ListItem类型的对象强制转换为字符串

本文关键字:转换 字符串 对象 ListItem 类型 | 更新日期: 2023-09-27 17:50:58

我试图从一个列表框中删除特定的项目,但是我得到一个转换错误。它似乎不喜欢我将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);中断,因为web服务正在寻找专门接收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

无法将ListItem类型的对象强制转换为字符串

你要在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
    }
}

当你试图从ListBox中删除RemoveItem时,你也会得到一个错误,因为你不允许从你正在迭代的Enumerable中删除。简单地说,你可以把你的foreach循环切换到for循环来解决这个问题。

这段代码应该可以移除和修复你的" cannot to cast"错误。

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
}

修改为:

ListBox1.Items.Remove(ListBox1.Items.FindByName(item));

ListBox1。Items返回ListItem对象的集合。您希望item的类型为ListItem,然后使用item.Text,或item.Value