我有一个 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更具限制性的类型。

10-07 12:42