我有IDictionary<string,dynamic>
喜欢这样
IDictionary<string, dynamic> protoTemplate;
在字典中,我有各种各样的对象,我必须对它进行排序并用于初始化新对象。我可以使用foreach
循环这样做:
var entries = new IDictionary<string, ConfigurationEntry>();
foreach (var value in protoTemplate["keys"]){
entries.Add(value.Key, new ConfigurationEntry(value.Value["description"], value.Value["protection"], value.Value["type"], value.Key, value.Value["default"]));
}
或者我可以使用LINQ查询并以这种方式执行。
IDictionary<string, ConfigurationEntry> entries = (from keys in (IDictionary<object, object>)protoTemplate["keys"] select keys)
.ToDictionary(value => (string)value.Key, value => ((IDictionary<object, object>)value.Value)
.ToDictionary(entry => (string)entry.Key, entry => (dynamic)entry.Value))
.ToDictionary(value => value.Key, value => new ConfigurationEntry(value.Value["description"], value.Value["protection"], value.Value["type"], value.Key, value.Value["default"]));
我的dillema是使用foreach
循环还是LINQ来排序我的字典。因为我的字典是动态的,所以我必须在对它使用LINQ查询之前强制转换对象,而我的LINQ解决方案似乎不如foreach
循环可读。 protoTemplate
来自反序列化的YAML,集合中的所有项都被解析为object
,并且必须转换为正确的类型。鉴于此,在这种情况下使用LINQ是否有任何优势,过度循环字典中的项目?