我有这样的嵌套字典实现:
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 :(得分: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>();
}
}