Parallel.ForEach报错求助:无法转换SelectedObjectCollection为IEnumerable<string>
错误原因解析
System.InvalidCastException的本质是:CheckedListBox.SelectedItems返回的SelectedObjectCollection是非泛型集合类型,它实现的是IEnumerable而非泛型的IEnumerable<string>。你在Parallel.ForEach(Of String)中直接传入这个集合,.NET无法自动完成非泛型到泛型字符串集合的转换,因此抛出类型转换错误。
修复代码示例
你需要先将选中项集合中的对象显式转换为字符串类型,再传入Parallel.ForEach。以下是两种可行的写法:
方法1:强制转换所有项为字符串(适用于确定所有项都是字符串的场景)
' 修复第一个Parallel.ForEach Parallel.ForEach(Of String)(Me.clb1.SelectedItems.Cast(Of String)(), Sub(selectedItem) ' 在这里编写对每个选中字符串项的处理逻辑 ' 示例:输出选中项内容 Console.WriteLine(selectedItem) End Sub) ' 修复第二个Parallel.ForEach Parallel.ForEach(Of String)(Me.CheckedListBox1.SelectedItems.Cast(Of String)(), Sub(xxx) ' 编写xxx对应的处理逻辑,xxx已转换为字符串类型 ' 示例:调用处理方法 ProcessSelectedItem(xxx) End Sub)
方法2:过滤并转换为字符串(适用于集合中可能存在非字符串项的场景)
如果你的列表中可能混入非字符串类型的项,用OfType(Of String)可以只保留能转换为字符串的项:
Parallel.ForEach(Of String)(Me.CheckedListBox1.SelectedItems.OfType(Of String)(), Sub(validStringItem) ' 处理逻辑 End Sub)
注意:Parallel.ForEach的第二个参数是执行逻辑的委托,不能只写空的Sub(xxx),必须在Sub块内编写具体的处理代码。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

