2012-06-14 6 views
0

Я хотел бы создать метод расширения для коллекции IDictionary Exception.Data, которая позволяет мне добавлять элемент в словарь без необходимости гарантировать, что ключ уникален.Как добавить метод расширения IDictionary для Exception.Data

Я не могу получить метод расширения для отображения.

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. Идите фигуру. Спасибо за вашу помощь! –