我想这样做
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。
答案 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));