2010-11-11 80 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 七年過去了,你現在將這個抽象命名爲什麼? – 2017-09-27 14:49:25

回答

2

我寫了一次包裝,讓我們看看吧,here它是。

您可以通過兩個鍵來訪問元素,例如dictionary["key1", "key2"]

1

是的,你可以:

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

當然,你可以添加一些方法來此包裝,簡化了查找和插入(和所需的任何其他功能)。

或者,你可以使用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>>; 

如果你與其他類交互(這是非常有用的,你不要無法控制),期待這種漫長的類型。然後你可以在你的文件中使用一個方便的名字,但它確實是完整類型的別名。

以下兩種用法是等價的。

MyWrapper w1 = new MyWrapper(); 
MyWrapper w2 = new Dictionary<class1, Dictionary<int, class2>>();