Skip to content

Commit

Permalink
修正DistinctBy的bug #77
Browse files Browse the repository at this point in the history
  • Loading branch information
ldqk committed Dec 16, 2022
1 parent f6fb90f commit 814b94b
Showing 1 changed file with 16 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -151,8 +151,16 @@ public static IEnumerable<T> IntersectAll<T>(this IEnumerable<IEnumerable<T>> so
/// <returns></returns>
public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{
var hash = new HashSet<TKey>();
return source.Where(p => hash.Add(keySelector(p)));
if (source == null) throw new ArgumentNullException(nameof(source));
if (keySelector == null) throw new ArgumentNullException(nameof(keySelector));
var set = new HashSet<TKey>();
foreach (var item in source)
{
if (set.Add(keySelector(item)))
{
yield return item;
}
}
}

/// <summary>
Expand Down Expand Up @@ -181,12 +189,9 @@ public static IEnumerable<T> IntersectAll<T>(this IEnumerable<IEnumerable<T>> so
/// <returns></returns>
public static IEnumerable<TSource> IntersectBy<TSource, TKey>(this IEnumerable<TSource> first, IEnumerable<TKey> second, Func<TSource, TKey> keySelector, IEqualityComparer<TKey> comparer)
{
if (first == null)
throw new ArgumentNullException(nameof(first));
if (second == null)
throw new ArgumentNullException(nameof(second));
if (keySelector == null)
throw new ArgumentNullException(nameof(keySelector));
if (first == null) throw new ArgumentNullException(nameof(first));
if (second == null) throw new ArgumentNullException(nameof(second));
if (keySelector == null) throw new ArgumentNullException(nameof(keySelector));
return IntersectByIterator(first, second, keySelector, comparer);
}

Expand Down Expand Up @@ -227,12 +232,9 @@ public static IEnumerable<T> IntersectAll<T>(this IEnumerable<IEnumerable<T>> so
/// <exception cref="ArgumentNullException"></exception>
public static IEnumerable<TSource> ExceptBy<TSource, TKey>(this IEnumerable<TSource> first, IEnumerable<TKey> second, Func<TSource, TKey> keySelector, IEqualityComparer<TKey> comparer)
{
if (first == null)
throw new ArgumentNullException(nameof(first));
if (second == null)
throw new ArgumentNullException(nameof(second));
if (keySelector == null)
throw new ArgumentNullException(nameof(keySelector));
if (first == null) throw new ArgumentNullException(nameof(first));
if (second == null) throw new ArgumentNullException(nameof(second));
if (keySelector == null) throw new ArgumentNullException(nameof(keySelector));
return ExceptByIterator(first, second, keySelector, comparer);
}

Expand Down

0 comments on commit 814b94b

Please sign in to comment.