平均 Drawing.Point 列表

Average a list of Drawing.Point

提问人:Matias 提问时间:10/1/2014 最后编辑:George MauerMatias 更新时间:10/1/2014 访问量:2080

问:

我有一个并且需要计算点的平均值:List<System.Drawing.Point>

如何使用 LINQ 执行此操作?

我试过了这个:

MyList.Average();我明白了: 错误 1 实例参数:无法从“System.Collections.Generic.List”转换为“System.Linq.IQueryable”

C# 列表

评论

0赞 BradleyDotNET 10/1/2014
我猜是因为需要先运行一个选择器。你有没有尝试过先将列表折叠成平均值?PointSelect
7赞 George Mauer 10/1/2014
什么是班级,您认为什么是平均水平?Point
0赞 Servy 10/1/2014
首先使用笔和纸执行此操作,然后一次一个,将您正在遵循的步骤映射到代码中。
0赞 Selman Genç 10/1/2014
我不认为存在仅接受 IEnumerable<TSource 的重载>
1赞 George Mauer 10/1/2014
那么 DavidG 在下面的回答效果很好,但请记住,点是,平均值很容易最终成为小数点,因此您需要一个策略来解决int

答:

4赞 DavidG 10/1/2014 #1

如果您需要分别平均 X 和 Y 分量,那么这将完成这项工作:

var avgPoint = new System.Drawing.Point 
{
    X = (int)Math.Round(MyList.Average(p => p.X)),
    Y = (int)Math.Round(MyList.Average(p => p.Y))
};

评论

0赞 George Mauer 10/1/2014
我会做这样的事情(int)Math.Round(MyList.Average(p => p.X))
0赞 DavidG 10/1/2014
@GeorgeMauer 那可能更好,我至少已经添加了。Math.Round
1赞 George Mauer 10/1/2014
还要在我的评论中注意 - 实际上需要一个表达式,所以没有必要先AverageSelect
0赞 DavidG 10/1/2014
@GeorgeMauer是的,要简单得多。