是否可以将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);
答案 0 :(得分:0)
如果使用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);
但是,在检索它们时,您需要经历拆箱的麻烦。
答案 1 :(得分:0)
你可以,但不是你写的方式。
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
答案 2 :(得分:0)
一种方法是将dHolder
和Object
的TValue放在一起,然后在检索后将其转换为相关类型。
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
运算符返回null
。TryGetValue
方法通过其密钥安全地检索值。