找不到查询模式Error的实现

P.B*_*key 4 c# linq

特定

   var selectedItems = listBoxControl1.SelectedItems;
   var selectedItemsList = (from i in selectedItems
                             select i).ToList();
Run Code Online (Sandbox Code Playgroud)

我收到错误

找不到源类型'DevExpress.XtraEditors.BaseListBoxControl.SelectedItemCollection'的查询模式的实现.找不到"选择".考虑明确指定范围变量'i'的类型.

using system.LINQ 完成

我可以使用foreach所以它必须实现IEnumerable.如果可能的话,我更喜欢使用LINQ over foreach来收集每个字符串.

我想ToString()在列表框控件中获取每个SelectedItem 的值并将它们粘贴到一个List<string>.我该怎么做?

Jon*_*eet 14

我可以使用foreach所以它必须实现IEnumerable.

事实并非如此,但这与此无关.它确实实现了IEnumerable,但IEnumerable<T>LINQ的工作原理并不是这样.

什么实际上是列表中?如果它已经是字符串,您可以使用:

var selectedItemsList = selectedItems.Cast<string>().ToList();
Run Code Online (Sandbox Code Playgroud)

或者,如果它是"任何对象"并且您想要呼叫,ToString您可以使用:

var selectedItemsList = selectedItems.Cast<object>()
                                     .Select(x => x.ToString())
                                     .ToList();
Run Code Online (Sandbox Code Playgroud)

请注意,调用Cast是为什么使用显式类型的范围变量建议的错误消息 - 以...开头的查询表达式from Foo foo in bar将转换为bar.Cast<Foo>()...


Ric*_*ich 7

对于LINQ来说,你需要一个IEnumerable<T>,直接IEnumerable是不够的.尝试:

var selectedItems = listboxControl1.SelectedItems.Cast<T> //where T is the actual type of the item
Run Code Online (Sandbox Code Playgroud)