Linq, коллекции и булева функция - PullRequest
1 голос
/ 15 декабря 2011

Я хочу сделать это

return array.Any(IsOdd);

, но вместо массива у меня есть список объектов, где IsOdd принимает в качестве аргумента свойство object.Number.

Я пробовал это

return objectList.Select(x => x.Number).Any(IsOdd);

, но получил эту ошибку "Select" не является членом System.Collections.Generic.List (Of myObject) '. "

Также мой код на самом деле находится на VBи я использую vs 2010, но нацеливаюсь на .net 2.0.

Ответы [ 2 ]

4 голосов
/ 15 декабря 2011

Обновленный ответ

Нет официального способа использовать LINQ в .NET 2.0, хотя, если вас интересует только LINQ to Objects, есть LINQBridge в помощь.

Оригинальный ответ

Во-первых, вы можете просто использовать другую перегрузку Any и написать

return objectList.Any(o => IsOdd(o.Number));

И, во-вторых, звучит так, как будто вы забыли using System.Linq в своем файле - хотя в этом случае прямой вызов Any тоже не сработает.

1 голос
/ 15 декабря 2011

Поскольку вы нацеливаетесь на 2.0, быстрый ответ таков: .NET 2.0 не поддерживает LINQ или методы расширения .

Если вы решите, что не хотите использовать LINQBridge , как предлагает @Jon, вы можете очень легко воссоздать свой собственный метод Any следующим образом:

public static class MyLINQBridge {
    public delegate TResult Func<T1, TResult>(T1 first);
    public static bool Any<T>(this IEnumerable<T> source, Func<T, bool> predicate) {
        foreach (var item in source) {
            if (predicate(item)) {
                return true;
            }
        }
        return false;
    }

}

Поскольку вы используете VS2010, компилятор поддерживает лямбдуметоды и могут поддерживать методы расширения , поэтому ваш окончательный код будет выглядеть следующим образом:

return objectList.Any(o => IsOdd(o.Number));
...