2011-12-14 3 views
1

Я хочу сделать этоLinq, коллекции и булева функция

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.

ответ

4

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

There is no official way использовать LINQ в .NET 2.0, хотя, если вы заинтересованы только в LINQ к объектам есть LINQBridge помочь.

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

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

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

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

+0

а теперь он также выглядит, как он ориентируется 2.0 –

+0

@AnthonyPegram: Обновлен ответ, чтобы он не выглядел глупо, спасибо. – Jon

1

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

Если вы решите, что не хотите использовать LINQBridge как подсказывает @ Джон, вы можете очень легко воссоздать свой собственный 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, то компилятор поддерживает методы лямбды и can support extension methods, так что ваш окончательный код будет выглядеть следующим образом:

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