如何从 lambda 返回链接列表集合?



我有一个LinkedList<Point>,我正在尝试将lambda应用于:

LinkedList<Point> node = LinkedPoints.Where<Point>(x => x.X + x.Y / someValue % 2 == 0);

..其中LinkedPointsLinkedList<Point>.我想从原始LinkedList<Point>创建一个新,其中Point的坐标相加并除以某个值会导致偶数。lambda 的实际状况并不重要,因为目前上面的代码不起作用,我想知道为什么以及如何让它工作。

我认为这个 lambda 正在Point上运行,所以它会返回List<Point>但是我想要一个新的LinkedList<Point>- 我该如何实现这一点?

只需使用接受IEnumerable参数的LinkedList构造函数:

LinkedList<Point> node =
new LinkedList<Point>(LinkedPoints.Where(x => x.X + x.Y / someValue % 2 == 0));

您还可以创建类似于.ToList().ToArray()方法的扩展方法:

static class EnumerableExtensions
{
public static LinkedList<T> ToLinkedList<T>(this IEnumerable<T> collection)
{
return new LinkedList<T>(collection);
}
}

用法:

LinkedList<Point> node = 
LinkedPoints.Where(x => x.X + x.Y / someValue % 2 == 0).ToLinkedList();

笔记:

  • .Where<Point>可以简化为仅.Where,因为类型是从列表中推断出来的。
  • 正如 mjwills 在注释中指出的那样,强烈建议在您的条件中使用括号,以使计算逻辑更清晰并避免错误。请参阅算术运算符优先级和关联性以供参考。另外,请注意不要成为意外整数除法的受害者。

最新更新