我正在努力为一个在其值中包含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;无法从使用情况中推断
我应该如何定义方法或调用它?在此先感谢!!
答案 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);
}
}