如何在TValue中使用IList制作IDictionary的扩展方法?

时间:2017-03-22 14:57:51

标签: c# linq dictionary generics extension-methods

我正在努力为一个在其值中包含List的Dictionary定义扩展方法。

我已经这样做了:

public static bool MyExtensionMethod<TKey, TValue, K>(this IDictionary<TKey, TValue> first, IDictionary<TKey, TValue> second) where TValue : IList<K>
    {
        //My code...
    }

要使用它我有这个课程:

public class A
{
    public Dictionary<int, List<B>> MyPropertyA { get; set; }
}

public class B
{
    public string MyPropertyB { get; set; }
}

但是当我这样做时:

var a1 = new A();
var a2 = new A();
var a = a1.MyPropertyA.MyExtensionMethod(a2.MyPropertyA)

我收到此错误&#39;方法的类型参数&#39; ...&#39;无法从使用情况中推断

我应该如何定义方法或调用它?在此先感谢!!

1 个答案:

答案 0 :(得分:1)

没有通用约束,定义要容易得多:

public static class Extensions
{
    public static bool MyExtensionMethod<TKey, TValue>(
        this IDictionary<TKey, List<TValue>> first,
        IDictionary<TKey, List<TValue>> second)
    {
        return true;
    }
}

public class A
{
    public Dictionary<int, List<B>> MyPropertyA { get; set; }
}
public class B
{
    public string MyPropertyB { get; set; }
}
class Program
{
    static void Main(string[] args)
    {

        var a1 = new A();
        var a2 = new A();
        var a = a1.MyPropertyA.MyExtensionMethod(a2.MyPropertyA);
    }
}

我不确定你是否需要第3个通用参数K。这种方法应该足以供您使用。

在旁注中,你应该知道Lookup类,它是一个带有键和一个列表的字典,除了它是不可变的。

public static class Extensions
{
    public static bool MyExtensionMethod<TKey, TValue>(
        this ILookup<TKey, TValue> first,
        ILookup<TKey, TValue> second)
    {
        return true;
    }
}

public class A
{
    public ILookup<int, B> MyPropertyA { get; set; }
}
public class B
{
    public string MyPropertyB { get; set; }
}
class Program
{
    static void Main(string[] args)
    {

        var a1 = new A();
        var a2 = new A();
        var a = a1.MyPropertyA.MyExtensionMethod(a2.MyPropertyA);
    }
}