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.ValueListBox1.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)
)的东西。好吧,我试过了,它也有同样的功能,但奇怪的是,你的代码已经完成了从列表中删除项目的任务。