Изменить: я ошибся в исходном вопросе. Речь должна идти о методах Last и LastOrDefault (или Single и SingleOrDefault, или First strong > и FirstOrDefault - их много!).
На основе Этот вопрос, я открыл Reflector и посмотрел на код
Enumerable.Last<T>(this collection)
Затем я перешел к коду
Enumerable.LastOrDefault<T>(this collection)
и я видел точно такой же фрагмент кода (около 20 строк), отличающийся только одной последней строкой (первый метод возвращает значение по умолчанию (T), второй выдает исключение).
У меня вопрос, почему это так? Почему ребята из Microsoft разрешают дублировать нетривиальные фрагменты кода внутри .Net framework? Разве у них нет обзора кода?
Enumerable.Last<t>
должен быть в O (N), потому чтоIEnumerator<T>
можно пройти только последовательно, начиная с первого элемента. Не существует метода O (1) для получения последнего элемента. - person bcat   schedule 05.09.2009x
являетсяIEnumerable<T>
, тоx.Last()
равно O (n). Если статическим типом внутреннего выражения являетсяIList<T>
, тоx.Last()
равно O (1). - person yfeldblum   schedule 06.09.2009