나는 이것을하는 내장 된 것이 없다고 생각 하지만 확장 방법을 작성하는 것은 정말 쉽습니다.
public static class Extensions
{
public static HashSet<T> ToHashSet<T>(
this IEnumerable<T> source,
IEqualityComparer<T> comparer = null)
{
return new HashSet<T>(source, comparer);
}
}
T
명시 적으로 유형을 표현할 수 없기 때문에 확장 방법 (또는 적어도 어떤 형태의 일반적인 방법)을 원합니다 .
var query = from i in Enumerable.Range(0, 10)
select new { i, j = i + 1 };
var resultSet = query.ToHashSet();
당신은 그것을 명시 적으로 호출하여 그것을 할 수 없습니다 HashSet<T>
생성자에 . 우리는 일반적인 방법으로 타입을 추론하고 있습니다.
이제 이름을 지정 하고 반환 할 수 있습니다. 하지만 구체적인 유형을 고수 합니다. 이는 표준 LINQ 연산자 ( , )와 일치하며 향후 확장 (예 :)을 허용합니다 . 사용할 비교를 지정하여 과부하를 제공 할 수도 있습니다.ToSet
ISet<T>
ToHashSet
ToDictionary
ToList
ToSortedSet
HashedSet
부분을 배제해야한다고 생각합니다 . 그냥 이후 혼란C#
과LINQ
라는 아무것도하지 않습니다HashedSet
.