![](/img/trans.png)
[英]Comparing two dictionaries and adding dictionary value to another dictionary 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.