我有一个 ItemCollection
,我想使用LINQ进行查询。我尝试了以下(人为)示例:
var lItem =
from item in lListBox.Items
where String.Compare(item.ToString(), "abc") == true
select item;
Visual Studio不断告诉我
Cannot find an implementation of the query pattern for source type 'System.Windows.Controls.ItemCollection'. 'Where' not found. Consider explicitly specifying the type of the range variable 'item'.
我该如何解决该问题?
最佳答案
这是因为ItemCollection仅实现IEnumerable
,而不实现IEnumerable<T>
。
您需要有效地调用Cast<T>()
,如果您明确指定范围变量的类型,则会发生这种情况:
var lItem = from object item in lListBox.Items
where String.Compare(item.ToString(), "abc") == 0
select item;
用点表示法是:
var lItem = lListBox.Items
.Cast<object>()
.Where(item => String.Compare(item.ToString(), "abc") == 0));
如果可以的话,如果您对集合中的内容有更好的了解,则可以指定比
object
更具限制性的类型。