这是另一种方法。有一个版本Max
没有标准,并且使用IComparable
. 因此,我们可以提供一种将任何东西包装在可比较对象中的方法,委托提供比较。
public class Comparable<T> : IComparable<Comparable<T>>
{
private readonly T _value;
private readonly Func<T, T, int> _compare;
public Comparable(T v, Func<T, T, int> compare)
{
_value = v;
_compare = compare;
}
public T Value { get { return _value; } }
public int CompareTo(Comparable<T> other)
{
return _compare(_value, other._value);
}
}
然后我们可以说:
Model maxModel = models.Select(m => new Comparable<Model>(m, (a, b) => a.Name.Length - b.Name.Length)).Max().Value;
这涉及很多额外的分配,但它在学术上有点有趣(我认为)。