Проблема с корректной работой универсального метода расширения
-
21-09-2019 - |
Вопрос
Я пытаюсь создать метод расширения AddRange для HashSet, чтобы я мог сделать что-то вроде этого:
var list = new List<Item>{ new Item(), new Item(), new Item() };
var hashset = new HashSet<Item>();
hashset.AddRange(list);
Это то, что у меня есть на данный момент:
public static void AddRange<T>(this ICollection<T> collection, List<T> list)
{
foreach (var item in list)
{
collection.Add(item);
}
}
Проблема в том, что когда я пытаюсь использовать AddRange, я получаю эту ошибку компилятора:
The type arguments for method 'AddRange<T>(System.Collections.Generic.ICollection<T>, System.Collections.Generic.List<T>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
Другими словами, я должен в конечном итоге использовать это вместо:
hashset.AddRange<Item>(list);
Что я здесь делаю не так?
Решение
Ваш код отлично работает для меня:
using System.Collections.Generic;
static class Extensions
{
public static void AddRange<T>(this ICollection<T> collection, List<T> list)
{
foreach (var item in list)
{
collection.Add(item);
}
}
}
class Item {}
class Test
{
static void Main()
{
var list = new List<Item>{ new Item(), new Item(), new Item() };
var hashset = new HashSet<Item>();
hashset.AddRange(list);
}
}
Не могли бы вы дать аналогичную короткую, но полную программу, которая не компилируется?
Другие советы
Использование
hashSet.UnionWith<Item>(list);
Не связан с StackOverflow