2012-06-14 53 views
0

我想爲IDictionary集合創建一個擴展方法Exception.Data,它允許我將項目添加到字典,而不必確保密鑰是唯一的。如何爲Exception.Data添加IDictionary擴展方法

我無法獲得擴展方法顯示。

public static void AddUnique<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key, TValue value) 
    { 

    } 

你可以使用這個喜歡

exception.Data.AddUnique("key", value); 

我在做什麼錯?這甚至有可能嗎?

+0

它工作正常。發佈更多的代碼,如完整的擴展方法類。 – asawyer

+0

發現問題 - 我的類型爲System.Collections.Generic.IDictionary而不是Systems.Collections.IDictionary。去搞清楚。謝謝你的幫助! –

回答

0

擴展方法中的類型必須與Exception.Data的類型完全匹配,即System.Collections.IDictionary。

System.Collections.Generic.IDictionary <> System.Collections.IDictionary

System.Collections.IDictionary沒有類型參數,所以正確的代碼將

public static void AddUnique<TKey, TValue>(this System.Collections.IDictionary dictionary, TKey key, TValue value) 
    { 

    } 
0

你在哪裏宣佈這個?理想情況下,您應該有一個靜態類來包含此方法。然後,如果它位於不同的名稱空間中,則需要確保您具有該名稱空間的using語句。

namespace MyNamespace 
{ 
    public static class MyExtensions 
    { 

     public static void AddUnique<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, 
                TKey key, 
                TValue value) 
     { 
      // implementation code 
     } 
    } 
} 

後來......

using MyNamespace; // if required 

// in a method 
exception.Data.AddUnique(key, value); 

注:也有關鍵「鑰匙」,這是一個字符串。如果您的TKey不是字符串,可能無法正常工作。

+0

擴展方法位於同一名稱空間中的靜態類中。 –

+0

發現問題 - 我的類型爲System.Collections.Generic.IDictionary而不是Systems.Collections.IDictionary。去搞清楚。謝謝你的幫助! –