Okay, hier ist die effizienteste Methode, die ich mir vorstellen kann, Standard .Net zu verwenden
using System;
using System.Collections.Generic;
public static class Extension
{
public static bool HasDuplicate<T>(
this IEnumerable<T> source,
out T firstDuplicate)
{
if (source == null)
{
throw new ArgumentNullException(nameof(source));
}
var checkBuffer = new HashSet<T>();
foreach (var t in source)
{
if (checkBuffer.Add(t))
{
continue;
}
firstDuplicate = t;
return true;
}
firstDuplicate = default(T);
return false;
}
}
Im Wesentlichen müssen Sie die gesamte Sequenz zweimal aufzählen, wenn Sie nur das erste Duplikat finden möchten.
Ich könnte dies weiter optimieren, indem ich eine leere und eine einzelne Elementsequenz speziell umhülle, aber dies würde die Lesbarkeit / Wartbarkeit mit minimalem Gewinn beeinträchtigen.