Есть ли у кого-нибудь хороший и эффективный метод расширения для определения наличия дубликатов в последовательности элементов?
Полагаю, я мог бы добавить return subjects.Distinct().Count() == subjects.Count()
в метод расширения, но вроде бы должен быть лучший способ. Этот метод должен будет считать элементы дважды и отсортировать все элементы distict. Лучшая реализация должна возвращать true для первого найденного дубликата. Есть хорошие предложения?
Я предполагаю, что контур может быть примерно таким:
public static bool HasDuplicates<T>(this IEnumerable<T> subjects)
{
return subjects.HasDuplicates(EqualityComparer<T>.Default);
}
public static bool HasDuplicates<T>(this IEnumerable<T> subjects, IEqualityComparer<T> comparer)
{
...
}
Но не совсем уверен, насколько разумной будет его реализация ...