Замість простого перетворення IEnumerable в HashSet, часто зручно перетворювати властивість іншого об'єкта в HashSet. Ви можете написати це так:
var set = myObject.Select(o => o.Name).ToHashSet();
але я вважаю за краще використовувати селектори:
var set = myObject.ToHashSet(o => o.Name);
Вони роблять те саме, і друге, очевидно, коротше, але я вважаю, що ідіома краще відповідає моєму мозку (я думаю, що це як ToDictionary).
Ось метод розширення, який слід використовувати, як підтримка користувацьких порівняльників як бонус.
public static HashSet<TKey> ToHashSet<TSource, TKey>(
this IEnumerable<TSource> source,
Func<TSource, TKey> selector,
IEqualityComparer<TKey> comparer = null)
{
return new HashSet<TKey>(source.Select(selector), comparer);
}
HashedSetчастиною. Це просто заплутано, оскількиC#іLINQнічого не називаєтьсяHashedSet.