public static ICollection <T> AjouterSaufSiStocke <T>( this ICollection <T> collection, IEnumerable <T> elementsAAjouter) { try { elementsAAjouter = (elementsAAjouter as ICollection <T>) ?? elementsAAjouter.ToArray(); // Permet de ne pas recalculer en permanence le contenu si c'est un Enumerable 'pur' if (elementsAAjouter.Any()) { if (elementsAAjouter.Count() == 1) { var item = elementsAAjouter.First(); if (!collection.Contains(item)) { collection .Add( item); } } else { var items = elementsAAjouter .Except(collection); collection .Ajouter(items); } } return(collection); } catch (Exception ex) { Fabrique.Instance ?.RecupererGestionnaireTraces() ?.PublierException( ex); throw new ExceptionTechnique( ExceptionBase.RecupererLibelleMessage(), ex); } }