Являются ли отдельные пакеты OSGI для API и реализации распространенной практикой?

Примечание. Начиная с .NET 4.0, фреймворк включает метод расширения .Zip в IEnumerable, зарегистрированный здесь здесь . Следующее поддерживается для потомков и для использования в версии .NET Framework раньше 4.0.

Я использую эти методы расширения:

// From http://community.bartdesmet.net/blogs/bart/archive/2008/11/03/c-4-0-feature-focus-part-3-intermezzo-linq-s-new-zip-operator.aspx
public static IEnumerable Zip(this IEnumerable first, IEnumerable second, Func func) {
    if (first == null) 
        throw new ArgumentNullException("first");
    if (second == null) 
        throw new ArgumentNullException("second");
    if (func == null)
        throw new ArgumentNullException("func");
    using (var ie1 = first.GetEnumerator())
    using (var ie2 = second.GetEnumerator())
        while (ie1.MoveNext() && ie2.MoveNext())
            yield return func(ie1.Current, ie2.Current);
}

public static IEnumerable> Zip(this IEnumerable first, IEnumerable second) {
    return first.Zip(second, (f, s) => new KeyValuePair(f, s));
}

EDIT: после комментариев я обязан чтобы уточнить и исправить некоторые вещи:

  • Первоначально я взял первую версию реализации Zip из блога Bart De Smet
  • Добавил перечислитель (который был также отметил в оригинальном посте Bart]
  • Добавлена ​​проверка нулевого параметра (также обсуждаемая в сообщении Барта)

16
задан Cœur 16 April 2017 в 07:23
поделиться