2017-03-22 62 views
1

我努力爲其值中包含List的字典定義擴展方法。如何在TValue中使用IList創建IDictionary的擴展方法?

我已經做到了這一點:

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) 

我得到這個錯誤'方法的類型參數'...'不能從用法'

我該如何定義方法或調用它?提前致謝!!

回答

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

我不知道你會需要第三個一般的參數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); 
    } 
} 
+0

這工作!我會看看查找類。非常感謝。 – joacoleza

相關問題