嵌套字典的包装器

时间:2010-11-11 11:09:53

标签: c# class dictionary wrapper

我有这样的嵌套字典实现:

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();

4 个答案:

答案 0 :(得分: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>>();

答案 1 :(得分:2)

我写过一次包装器,让我们看看here它是。

您可以通过两个键访问元素,例如dictionary["key1", "key2"]

答案 2 :(得分:1)

是的,你可以:

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

当然,您可以向此包装器添加一些方法,以简化查找和插入(以及所需的任何其他功能)。

或者,您可以使用var关键字来减少一些“噪音”,而不会引入包装器:

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

或者,组合......

var obj1 = new MyWrapper();

答案 3 :(得分: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>();
    }
}