我应该使用foreach vs LINQ来排序和初始化Dictionary中的对象吗?

时间:2014-11-24 07:14:32

标签: c# linq dictionary foreach

我有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是否有任何优势,过度循环字典中的项目?

0 个答案:

没有答案