Je ne pense que il n'y a rien construit dans lequel n'est présente... mais il est très facile d'écrire une méthode d'extension:
public static class Extensions
{
public static HashSet<T> ToHashSet<T>(this IEnumerable<T> source)
{
return new HashSet<T>(source);
}
}
Notez que vous n'avez vraiment une extension de la méthode (ou au moins une méthode générique d'une certaine forme) ici, parce que vous ne pouvez pas être en mesure d'exprimer le type d' T
explicitement:
var query = from i in Enumerable.Range(0, 10)
select new { i, j = i + 1 };
var resultSet = query.ToHashSet();
Vous ne pouvez pas faire cela avec un appel explicite à l' HashSet<T>
constructeur. Nous sommes en s'appuyant sur l'inférence de type pour les méthodes génériques pour le faire pour nous.
Maintenant, vous pourriez choisir un nom ToSet
et retour ISet<T>
- mais je collerais avec ToHashSet
et le type de béton. Cela est conforme à la norme des opérateurs LINQ (ToDictionary
, ToList
) et permet l'agrandissement (par exemple, ToSortedSet
). Vous pouvez également fournir une surcharge en précisant la comparaison à utiliser.