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

C# 无法将ListItem类型的对象强制转换为字符串,c#,web-services,loops,C#,Web Services,Loops,我试图从列表框中删除特定项,但是我得到了一个强制转换错误。 似乎不喜欢我将列表框中的项目称为stringitems if (CheckBox1.Checked == true) { foreach (string item in ListBox1.Items) { WebService1 ws = new WebService1(); int flag = ws.cal

我试图从列表框中删除特定项,但是我得到了一个强制转换错误。 似乎不喜欢我将列表框中的项目称为
string
items

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'.
我如何解决这个问题

编辑

我的问题是,当我更改为
(ListBox1.Items中的ListItem项)
(我已经尝试过)的方法时,行-
int flag=ws.callFlags(10,item)
中断,因为web服务特别希望接收
字符串。这就产生了错误-

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

将您的删除更改为:

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

将您的删除更改为:

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

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

ListBox1.Items返回
ListItem
对象的集合。您希望
的类型为
列表项
,然后使用
项.文本
,或者可能是
项.值

您正在迭代
列表项
,因此您应该执行以下操作:

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
    }
}
最后一个音符;您的
WebService1
似乎是一个自定义类,让它实现
IDisposable
接口并将其包装在
using
子句中可能是一个好主意,这样您就可以确保它在使用后得到正确处理

public class WebService1 : IDisposable { // ... 

using (WebService1 ws = new WebService1())
{ 
    // Code from inside your for loop here
}

您正在迭代
列表项
,因此应该执行以下操作:

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
    }
}
最后一个音符;您的
WebService1
似乎是一个自定义类,让它实现
IDisposable
接口并将其包装在
using
子句中可能是一个好主意,这样您就可以确保它在使用后得到正确处理

public class WebService1 : IDisposable { // ... 

using (WebService1 ws = new WebService1())
{ 
    // Code from inside your for loop here
}

使用
ListItem
而不是
string
。请参阅编辑,因为我已经尝试实现此功能,问题是web服务需要字符串。请使用
ListItem
而不是
string
。请参阅编辑,因为我已经尝试实现此功能,问题是web服务需要一个字符串。这似乎非常接近,而且是一个经过深思熟虑的答案,但是出于某种原因,大约有一半的列表是空白的?即使出于调试目的,我只将数据库中的两条记录设置为“-1”,那么是否应该在列表框中保留两条记录?如果我能让它工作,我会将其标记为正确,但是现在结果很奇怪。好的,我刚刚意识到,如果我按一次,其中一半被删除,我将取消选中,然后再次选中另一半,如果我重复此操作,最终我会转到剩下的两行“-1”!!所以它确实起了作用,但是你知道为什么我需要反复推它,直到所有不需要的值都消失了吗@Jambo如果不知道
callFlags
方法的作用,就很难告诉您出了什么问题。由于您根据
1
if(flag==1)
)检查返回值,因此您正在删除调用
callFlags
返回
1
的每个项目。也许您只想检查它是否不等于
-1
?类似(
if(flag!=-1)
)的东西。好吧,我试过了,它也有同样的功能,但奇怪的是,你的代码在从列表中删除项目方面做了它想要做的事情。这看起来非常接近,是一个非常深思熟虑的答案,但是出于某种原因,大约有一半的列表被清除了?即使出于调试目的,我只将数据库中的两条记录设置为“-1”,那么是否应该在列表框中保留两条记录?如果我能让它工作,我会将其标记为正确,但是现在结果很奇怪。好的,我刚刚意识到,如果我按一次,其中一半被删除,我将取消选中,然后再次选中另一半,如果我重复此操作,最终我会转到剩下的两行“-1”!!所以它确实起了作用,但是你知道为什么我需要反复推它,直到所有不需要的值都消失了吗@Jambo如果不知道
callFlags
方法的作用,就很难告诉您出了什么问题。由于您根据
1
if(flag==1)
)检查返回值,因此您正在删除调用
callFlags
返回
1
的每个项目。也许您只想检查它是否不等于
-1
?类似(
if(flag!=-1)
)的东西。好吧,我试过了,它也有同样的功能,但奇怪的是,你的代码已经完成了从列表中删除项目的任务。