让通用扩展方法正常工作的问题

时间:2009-10-17 21:13:33

标签: c# generics list extension-methods hashset

我正在尝试为HashSet创建扩展方法AddRange,所以我可以这样做:

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);

我在这里做错了什么?

2 个答案:

答案 0 :(得分:30)

使用

hashSet.UnionWith<Item>(list);

答案 1 :(得分:3)

您的代码适用于我:

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);
    }
}

你能否提供类似的简短但完整的程序,但无法编译?