public static class IEnumerableExtension
{
public static T MyMax<T>(this IEnumerable<T> source)
where T : IComparable
{
var enumerator = source.GetEnumerator();
if (!enumerator.MoveNext())
throw new InvalidOperationException();
var max = enumerator.Current;
while (enumerator.MoveNext())
max = max.CompareTo(enumerator.Current) < 0 ? enumerator.Current : max;
return max;
}
}
答案找到了——可以组织一个扩展方法,调用enumerator.MoveNext(),如果返回false,那么我们丢弃异常,否则我们赋值enumerator.Current。稍后,我们使用相同的 MoveNext() 运行整个集合并进行比较。