49

我有一个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'.

我该如何解决这个问题?

4

2 回答 2

92

这是因为 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.

于 2009-07-21T18:27:04.090 回答
4

您需要指定“项目”的类型

var lItem =
    from object item in lListBox.Items
    where String.Compare(item.ToString(), "abc") == true
    select item;
于 2009-07-21T18:30:30.607 回答