2019-01-12 13:41:08 -07:00
|
|
|
using System;
|
2016-10-29 15:22:20 -07:00
|
|
|
using System.Collections.Generic;
|
|
|
|
using System.Linq;
|
|
|
|
|
|
|
|
namespace Rssdp.Infrastructure
|
|
|
|
{
|
2019-01-12 13:41:08 -07:00
|
|
|
internal static class IEnumerableExtensions
|
|
|
|
{
|
|
|
|
public static IEnumerable<T> SelectManyRecursive<T>(this IEnumerable<T> source, Func<T, IEnumerable<T>> selector)
|
|
|
|
{
|
2020-06-20 01:35:29 -07:00
|
|
|
if (source == null)
|
|
|
|
{
|
|
|
|
throw new ArgumentNullException(nameof(source));
|
|
|
|
}
|
|
|
|
|
|
|
|
if (selector == null)
|
|
|
|
{
|
|
|
|
throw new ArgumentNullException(nameof(selector));
|
|
|
|
}
|
2016-10-29 15:22:20 -07:00
|
|
|
|
2019-01-07 16:24:34 -07:00
|
|
|
return !source.Any() ? source :
|
|
|
|
source.Concat(
|
|
|
|
source
|
|
|
|
.SelectMany(i => selector(i).EmptyIfNull())
|
|
|
|
.SelectManyRecursive(selector)
|
|
|
|
);
|
|
|
|
}
|
2016-10-29 15:22:20 -07:00
|
|
|
|
2019-01-07 16:24:34 -07:00
|
|
|
public static IEnumerable<T> EmptyIfNull<T>(this IEnumerable<T> source)
|
|
|
|
{
|
|
|
|
return source ?? Enumerable.Empty<T>();
|
|
|
|
}
|
|
|
|
}
|
2016-10-29 15:22:20 -07:00
|
|
|
}
|