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ü T
açı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 ToSet
ve getiri ISet<T>
- ama ile sopa ToHashSet
ve 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#
veLINQ
denilen bir şey yokHashedSet
.