Я думаю, что хорошее место для запуска с Ninject, это является новым и приняло во внимание большую точную настройку и является действительно быстрым. У Nate, разработчика, действительно есть большой сайт и большая поддержка.
Это определенно не глупый вопрос, и это то, что F # поддерживает с помощью yield!
для всей коллекции по сравнению с yield
для отдельного элемента. (Это может быть очень полезно с точки зрения хвостовой рекурсии ...)
К сожалению, это не поддерживается в C #.
Однако, если у вас есть несколько методов, каждый из которых возвращает IEnumerable
, вы можно использовать Enumerable.Concat
, чтобы упростить код:
private static IEnumerable<ErrorInfo> GetErrors(Card card)
{
return GetMoreErrors(card).Concat(GetOtherErrors())
.Concat(GetValidationErrors())
.Concat(AnyMoreErrors())
.Concat(ICantBelieveHowManyErrorsYouHave());
}
Тем не менее, есть одно очень важное различие между двумя реализациями: этот вызовет все методы немедленно , даже если он будет использовать только возвращенные итераторы по одному. Ваш существующий код будет ждать, пока он '
Я не вижу ничего плохого в вашей функции, я бы сказал, что она делает то, что вы хотите.
Думайте о Yield как о возвращении элемента в последнем перечислении каждый раз что он вызывается, поэтому, когда он у вас есть в таком цикле foreach, каждый раз, когда он вызывается, он возвращает 1 элемент. У вас есть возможность помещать условные операторы в свой foreach для фильтрации набора результатов. (просто не уступая критериям исключения)
Если вы добавляете последующие выходы позже в методе, он продолжит добавлять 1 элемент в перечисление, что позволяет делать такие вещи, как ...
public IEnumerable<string> ConcatLists(params IEnumerable<string>[] lists)
{
foreach (IEnumerable<string> list in lists)
{
foreach (string s in list)
{
yield return s;
}
}
}
Да, можно вернуть сразу все ошибки. Просто верните List
или ReadOnlyCollection
.
Возвращая IEnumerable
, вы возвращаете последовательность чего-то. На первый взгляд это может показаться идентичным возврату коллекции, но есть ряд отличий, о которых следует помнить.
Коллекции
Последовательности
IEnumerable
допускает ленивую оценку, возвращая List < T>
нет).