|
@@ -10,30 +10,24 @@ namespace System.Linq
|
|
|
{
|
|
|
public static partial class AsyncEnumerable
|
|
|
{
|
|
|
- public static Task<Dictionary<TKey, TElement>> ToDictionary<TSource, TKey, TElement>(this IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector, IEqualityComparer<TKey> comparer)
|
|
|
+ public static Task<Dictionary<TKey, TSource>> ToDictionary<TSource, TKey>(this IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector)
|
|
|
{
|
|
|
if (source == null)
|
|
|
throw new ArgumentNullException(nameof(source));
|
|
|
if (keySelector == null)
|
|
|
throw new ArgumentNullException(nameof(keySelector));
|
|
|
- if (elementSelector == null)
|
|
|
- throw new ArgumentNullException(nameof(elementSelector));
|
|
|
- if (comparer == null)
|
|
|
- throw new ArgumentNullException(nameof(comparer));
|
|
|
|
|
|
- return ToDictionary(source, keySelector, elementSelector, comparer, CancellationToken.None);
|
|
|
+ return ToDictionary(source, keySelector, CancellationToken.None);
|
|
|
}
|
|
|
|
|
|
- public static Task<Dictionary<TKey, TElement>> ToDictionary<TSource, TKey, TElement>(this IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector)
|
|
|
+ public static Task<Dictionary<TKey, TSource>> ToDictionary<TSource, TKey>(this IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector, CancellationToken cancellationToken)
|
|
|
{
|
|
|
if (source == null)
|
|
|
throw new ArgumentNullException(nameof(source));
|
|
|
if (keySelector == null)
|
|
|
throw new ArgumentNullException(nameof(keySelector));
|
|
|
- if (elementSelector == null)
|
|
|
- throw new ArgumentNullException(nameof(elementSelector));
|
|
|
|
|
|
- return ToDictionary(source, keySelector, elementSelector, CancellationToken.None);
|
|
|
+ return source.ToDictionary(keySelector, x => x, EqualityComparer<TKey>.Default, cancellationToken);
|
|
|
}
|
|
|
|
|
|
public static Task<Dictionary<TKey, TSource>> ToDictionary<TSource, TKey>(this IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector, IEqualityComparer<TKey> comparer)
|
|
@@ -48,17 +42,19 @@ namespace System.Linq
|
|
|
return ToDictionary(source, keySelector, comparer, CancellationToken.None);
|
|
|
}
|
|
|
|
|
|
- public static Task<Dictionary<TKey, TSource>> ToDictionary<TSource, TKey>(this IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector)
|
|
|
+ public static Task<Dictionary<TKey, TSource>> ToDictionary<TSource, TKey>(this IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector, IEqualityComparer<TKey> comparer, CancellationToken cancellationToken)
|
|
|
{
|
|
|
if (source == null)
|
|
|
throw new ArgumentNullException(nameof(source));
|
|
|
if (keySelector == null)
|
|
|
throw new ArgumentNullException(nameof(keySelector));
|
|
|
+ if (comparer == null)
|
|
|
+ throw new ArgumentNullException(nameof(comparer));
|
|
|
|
|
|
- return ToDictionary(source, keySelector, CancellationToken.None);
|
|
|
+ return source.ToDictionary(keySelector, x => x, comparer, cancellationToken);
|
|
|
}
|
|
|
|
|
|
- public static Task<Dictionary<TKey, TElement>> ToDictionary<TSource, TKey, TElement>(this IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector, IEqualityComparer<TKey> comparer, CancellationToken cancellationToken)
|
|
|
+ public static Task<Dictionary<TKey, TElement>> ToDictionary<TSource, TKey, TElement>(this IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector)
|
|
|
{
|
|
|
if (source == null)
|
|
|
throw new ArgumentNullException(nameof(source));
|
|
@@ -66,18 +62,8 @@ namespace System.Linq
|
|
|
throw new ArgumentNullException(nameof(keySelector));
|
|
|
if (elementSelector == null)
|
|
|
throw new ArgumentNullException(nameof(elementSelector));
|
|
|
- if (comparer == null)
|
|
|
- throw new ArgumentNullException(nameof(comparer));
|
|
|
|
|
|
- return source.Aggregate(
|
|
|
- new Dictionary<TKey, TElement>(comparer),
|
|
|
- (d, x) =>
|
|
|
- {
|
|
|
- d.Add(keySelector(x), elementSelector(x));
|
|
|
- return d;
|
|
|
- },
|
|
|
- cancellationToken
|
|
|
- );
|
|
|
+ return ToDictionary(source, keySelector, elementSelector, CancellationToken.None);
|
|
|
}
|
|
|
|
|
|
public static Task<Dictionary<TKey, TElement>> ToDictionary<TSource, TKey, TElement>(this IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector, CancellationToken cancellationToken)
|
|
@@ -92,26 +78,40 @@ namespace System.Linq
|
|
|
return source.ToDictionary(keySelector, elementSelector, EqualityComparer<TKey>.Default, cancellationToken);
|
|
|
}
|
|
|
|
|
|
- public static Task<Dictionary<TKey, TSource>> ToDictionary<TSource, TKey>(this IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector, IEqualityComparer<TKey> comparer, CancellationToken cancellationToken)
|
|
|
+ public static Task<Dictionary<TKey, TElement>> ToDictionary<TSource, TKey, TElement>(this IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector, IEqualityComparer<TKey> comparer)
|
|
|
{
|
|
|
if (source == null)
|
|
|
throw new ArgumentNullException(nameof(source));
|
|
|
if (keySelector == null)
|
|
|
throw new ArgumentNullException(nameof(keySelector));
|
|
|
+ if (elementSelector == null)
|
|
|
+ throw new ArgumentNullException(nameof(elementSelector));
|
|
|
if (comparer == null)
|
|
|
throw new ArgumentNullException(nameof(comparer));
|
|
|
|
|
|
- return source.ToDictionary(keySelector, x => x, comparer, cancellationToken);
|
|
|
+ return ToDictionary(source, keySelector, elementSelector, comparer, CancellationToken.None);
|
|
|
}
|
|
|
|
|
|
- public static Task<Dictionary<TKey, TSource>> ToDictionary<TSource, TKey>(this IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector, CancellationToken cancellationToken)
|
|
|
+ public static Task<Dictionary<TKey, TElement>> ToDictionary<TSource, TKey, TElement>(this IAsyncEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector, IEqualityComparer<TKey> comparer, CancellationToken cancellationToken)
|
|
|
{
|
|
|
if (source == null)
|
|
|
throw new ArgumentNullException(nameof(source));
|
|
|
if (keySelector == null)
|
|
|
throw new ArgumentNullException(nameof(keySelector));
|
|
|
+ if (elementSelector == null)
|
|
|
+ throw new ArgumentNullException(nameof(elementSelector));
|
|
|
+ if (comparer == null)
|
|
|
+ throw new ArgumentNullException(nameof(comparer));
|
|
|
|
|
|
- return source.ToDictionary(keySelector, x => x, EqualityComparer<TKey>.Default, cancellationToken);
|
|
|
+ return source.Aggregate(
|
|
|
+ new Dictionary<TKey, TElement>(comparer),
|
|
|
+ (d, x) =>
|
|
|
+ {
|
|
|
+ d.Add(keySelector(x), elementSelector(x));
|
|
|
+ return d;
|
|
|
+ },
|
|
|
+ cancellationToken
|
|
|
+ );
|
|
|
}
|
|
|
}
|
|
|
}
|