Linq,集合和布尔函数

时间:2011-12-14 23:24:25

标签: linq visual-studio-2010 collections .net-2.0 boolean

我想这样做

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 个答案:

答案 0 :(得分:4)

更新回答

There is no official way在.NET 2.0中使用LINQ,但如果您只对LINQ to Objects感兴趣,那么LINQBridge可以提供帮助。

原始回答

首先,您可以简单地使用Any的其他重载并写入

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

其次,这听起来好像忘记了文件中的using System.Linq - 尽管在这种情况下,直接调用Any也无效。

答案 1 :(得分:1)

由于您的目标是2.0,因此快速回答是 .NET 2.0不支持LINQ或扩展方法

如果你决定不想像@Jon建议的那样使用 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,编译器支持lambda方法和can support extension methods,因此您的最终代码如下所示:

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