无法将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
你要在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
中删除Remove
和Item
时,你也会得到一个错误,因为你不允许从你正在迭代的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
。