Bunu yapan bir şey olduğunu sanmıyorum ... ama bir uzantı yöntemi yazmak gerçekten kolay:
public static class Extensions
{
public static HashSet<T> ToHashSet<T>(
this IEnumerable<T> source,
IEqualityComparer<T> comparer = null)
{
return new HashSet<T>(source, comparer);
}
}
Burada gerçekten bir uzantı yöntemi (veya en azından bir formun genel bir yöntemi) istediğinizi unutmayın, çünkü türünü Taçıkça ifade edemeyebilirsiniz :
var query = from i in Enumerable.Range(0, 10)
select new { i, j = i + 1 };
var resultSet = query.ToHashSet();
Bunu yapıcıya açık bir çağrı ile yapamazsınız HashSet<T>. Bizim için genel yöntemler için tür çıkarımlarına güveniyoruz.
Şimdi olabilir Adını tercih ToSetve getiri ISet<T>- ama ile sopa ToHashSetve beton türü. Bu, standart LINQ operatörleriyle ( ToDictionary, ToList) tutarlıdır ve gelecekteki genişlemeye (ör. ToSortedSet) Olanak tanır . Kullanılacak karşılaştırmayı belirten bir aşırı yük de sağlamak isteyebilirsiniz.
HashedSet-parçayı dışarıda bırakmalısın . O zamandan beri kafa karıştırıcıC#veLINQdenilen bir şey yokHashedSet.