2010-11-11 4 views
0

Я вложенный словарь реализации, как это:Обертки для вложенного словаря

Dictionary<class1, Dictionary<int, class2>> 

Теперь я использую это во многих местах в моем проекте, , но я чувствую себя некрасиво писать такое длинное имя каждый раз, когда, например:

Dictionary<class1, Dictionary<int, class2>> obj1=new Dictionary<class1, Dictionary<int, class2>>(); 
Dictionary<class1, Dictionary<int, class2>> obj2=new Dictionary<class1, Dictionary<int, class2>>(); 
Dictionary<class1, Dictionary<int, class2>> obj3=new Dictionary<class1, Dictionary<int, class2>>(); 

могу ли я сделать некоторые обертку для этого словаря, так что я могу просто написать это, чтобы сделать его более удобным для чтения:

MyWrapper obj1=new MyWrapper(); 
MyWrapper obj2=new MyWrapper(); 
MyWrapper obj3=new MyWrapper(); 
+0

Отличное имя класса!/s Семь лет назад, как бы вы назвали эту абстракцию сейчас? –

ответ

2

Я написал обертку один раз, позволяет увидеть, here это.

Вы можете получить доступ к элементу двумя ключами, подобными этому dictionary["key1", "key2"].

1

Да, вы могли бы:

public class MyWrapper : Dictionary<class1, Dictionary<int, class2>> 
{} 

Конечно, вы можете добавить некоторые методы в этой оболочке, упрощающие Lookups и вставки (и любые другие функции, необходимые).

В качестве альтернативы, вы можете использовать var ключевое слово, чтобы уменьшить некоторые из "шума", без введения обертки:

var obj1 = new Dictionary<class1, Dictionary<int, class2>>(); 

Или, сочетания ...

var obj1 = new MyWrapper(); 
1

Вы можете использовать общий класс обертки, но я бы не сказал, что это обеспечит ясность кода. Кроме того, вам придется писать методы, обеспечивающие доступ ко внутренним словарям.

public class MyWrapper<T1, T2, T3> 
{ 
    private IDictionary<T1, IDictionary<T2, T3>> dictionary; 

    public MyWrapper() 
    { 
     dictionary = new Dictionary<T1, IDictionary<T2, T3>>(); 
    } 

    public static void Main(string[] args) 
    { 
     var myWrapper = new MyWrapper<int, string, bool>(); 
    } 
} 
3

Если вы не хотите, чтобы создать оболочку, вы можете создать псевдоним в верхней части вашего .cs-файла

using MyWrapper = 
    System.Collections.Generic.Dictionary<Namespace.class1, 
    System.Collections.Generic.Dictionary<int, Namespace.class2>>; 

Это особенно полезно, если вы взаимодействуете с другими классами (которые вы дон t t), которые ожидают этих длинных типов. Затем вы можете использовать удобное имя в своих файлах, но оно действительно является псевдонимом для полного типа.

Оба эти использования эквивалентны.

MyWrapper w1 = new MyWrapper(); 
MyWrapper w2 = new Dictionary<class1, Dictionary<int, class2>>(); 
Смежные вопросы