我有一个LinkedList<Point>
,我正在尝试将lambda应用于:
LinkedList<Point> node = LinkedPoints.Where<Point>(x => x.X + x.Y / someValue % 2 == 0);
..其中LinkedPoints
是LinkedList<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 在注释中指出的那样,强烈建议在您的条件中使用括号,以使计算逻辑更清晰并避免错误。请参阅算术运算符优先级和关联性以供参考。另外,请注意不要成为意外整数除法的受害者。