Как добавить метод расширения 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);

Что я делаю не так? Это вообще возможно?


person Mark Williams    schedule 14.06.2012    source источник
comment
Это работает нормально. Опубликуйте больше кода, например, полный класс метода расширения.   -  person asawyer    schedule 14.06.2012
comment
Нашел проблему - у меня был тип System.Collections.Generic.IDictionary вместо Systems.Collections.IDictionary. Иди разберись. Спасибо за вашу помощь!   -  person Mark Williams    schedule 14.06.2012


Ответы (2)


Где вы это декларируете? В идеале у вас должен быть статический класс, содержащий этот метод. Затем, если он находится в другом пространстве имен, вам нужно убедиться, что у вас есть оператор 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);

Примечание. У вас также был key как "ключ", который является строковым литералом. Может не работать, если ваш TKey не является строкой.

person gregsdennis    schedule 14.06.2012
comment
Метод расширения находится внутри статического класса в том же пространстве имен. - person Mark Williams; 14.06.2012
comment
Нашел проблему - у меня был тип System.Collections.Generic.IDictionary вместо Systems.Collections.IDictionary. Иди разберись. Спасибо за вашу помощь! - person Mark Williams; 14.06.2012

Тип в методе расширения должен точно соответствовать типу 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)
    {

    }
person Mark Williams    schedule 14.06.2012