Просто чтобы расширить (правильный) ответ SLaks.
Когда вы вызываете ToList
, это вызывает универсальный метод Enumerable.ToList<T>(IEnumerable<T> source)
.Затем компилятор использует вывод обобщенного типа обычным способом для обработки T
.
. Обратите внимание, что на данный момент, хотя есть вызовы для ToList
, ToDictionary
и ToArray
, эквивалента дляHashSet
.Однако написать очень просто:
public static class MoreExtensions
{
public static HashSet<T> ToHashSet<T>(this IEnumerable<T> source)
{
return new HashSet<T>(source);
}
public static HashSet<T> ToHashSet<T>(this IEnumerable<T> source,
IEqualityComparer<T> comparer)
{
return new HashSet<T>(source, comparer);
}
}
Выполнение такого рода действий является only способом создания экземпляра универсального типа с аргументом типа, который является анонимным типом, сокращеннодженериков.Это хорошая работа, это легко:)