You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 02:20:46