繁体   English   中英

将字典添加到另一个字典C#

[英]Adding a dictionary to another dictionary C#

是否有可能增加一个dictionary到另一个dictionary包含不同的字典中的值?

Dictionary<String, Func<String>> d1 = new Dictionary<String,Func<String>>();
Dictionary<String, Func<String,String>> d2 = new Dictionary<String, Func<String,String>>();
Dictionary<String, Dictionary> dHolder = new Dictionary<String, Dictionary>();
dHolder.add("key",d1);
dHolder.add("key",d2); 

如果使用IDictionary接口,则可以执行此操作,所有字典(无论使用什么类型的参数)都从该接口继承。

Dictionary<String, Func<String>> d1 = new Dictionary<String,Func<String>>();
Dictionary<String, Func<String,String>> d2 = new Dictionary<String, Func<String,String>>();
Dictionary<String, IDictionary> dHolder = new Dictionary<String, IDictionary>();

dHolder.Add("key1", d1);
dHolder.Add("key2", d2); 

但是,当您检索值时,您将需要将其拆箱。

您可以但不完全是您编写的方式。

var dict1 = new Dictionary<string, ObjectTypeA>();
var dict2 = new Dictionary<string, ObjectTypeB>();
var holder = new Dictionary<string, IDictionary>();

holder["key1"] = dict1;
holder["key2"] = dict2;

现在唯一的问题是您丢失了通用类型,因此在拔出钥匙时需要检查字典的类型。

var val = holder["key1"];    //Returns an IDictionary
var dictType1 = holder["key1"] as Dictionary<string, ObjectTypeA>;

//dictType1 will be null if it isn't a Dictionary<string, ObjectTypeA>

因此,您将不得不在某些时候做一些类型检查/转换,但是如果您不需要强类型输入,您仍然可以作为IDictionary与它进行交互。

holder["key1"]["newKey"] = new ObjectTypeA();    //Works
holder["key1"]["newKey2"] = new ObjectTypeB();   //Runtime exception

一种方法是使dHolder的TValue成为Object ,然后在检索后将其转换为相关类型。

    Dictionary<String, Func<String>> d1 = new Dictionary<String, Func<String>>();
    Dictionary<String, Func<String, String>> d2 = new Dictionary<String, Func<String, String>>();
    Dictionary<String, Object> dHolder = new Dictionary<String, Object>();
    dHolder.Add("key1", d1);
    dHolder.Add("key2", d2);

    Dictionary<String, Func<String>> val1 = dHolder["key1"] as Dictionary<String, Func<String>>;
    Dictionary<String, Func<String, String>> val2 = dHolder["key2"] as Dictionary<String, Func<String, String>>;

备注:

  • as运算符失败,则as运算符返回null
  • 您还可以使用字典的TryGetValue方法通过其键安全地获取值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM