D'accord, voici la méthode la plus efficace à laquelle je puisse penser en utilisant .Net standard
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;
}
}
essentiellement, quel est l'intérêt d'énumérer la séquence entière deux fois si tout ce que vous voulez faire est de trouver le premier doublon.
Je pourrais optimiser cela davantage en enveloppant spécialement une séquence d'élément vide et unique, mais cela déprécierait de la lisibilité / maintenabilité avec un gain minimal.