如何在c#中返回最小谓词中的对象
本文关键字:谓词 对象 返回 | 更新日期: 2023-09-27 18:06:22
在c#中,我有以下代码
Pixel topLeft = potentialTopLeft.Min(p => p.GetX());
获取列表potentialTopLeft
中最小的Pixel对象,但它用来比较Pixel值的是GetX()
类方法的值。但问题是,它返回最小GetX()
的值,而我想要具有最小GetX()
的Pixel对象。有人知道怎么修吗?
应用Sort,然后从IOrderedList
中取出第一个元素:
var topLeft = potentialTopLeft.OrderBy(p => p.GetX()).FirstOrDefault();
您不需要对整个列表排序以找到X
最小的Pixel
,这会增加您的代码复杂性。您可以简单地使用:
var minX = potentialTopLeft.Min(p => p.GetX());
Pixel topLeft = potentialTopLeft.First(p => p.GetX() == minX);
或者您可以让Pixel
实现IComparable<Pixel>
,并提供一个快速的CompareTo
方法实现,如下所示:
class Pixel : IComparable<Pixel>
{
public int X { get; set; }
int IComparable<Pixel>.CompareTo(Pixel other)
{
if (other.X > this.X) { return -1; }
else if (other.X == this.X) { return 0; }
else {return 1; }
}
}
现在你可以使用Min
方法:
Pixel topLeft = potentialTopLeft.Min();
这种方法的好处是它使您的调用代码更具可读性,如果您在代码中有其他需要比较Pixel
实例的地方,您可以使用它。