c# - 使用LINQ将XML解析成Dictionary

标签 c# linq

我有一个配置文件,例如:

<ConfigurationFile>
    <Config name="some.configuration.setting" value="some.configuration.value"/>
    <Config name="some.configuration.setting2" value="some.configuration.value2"/>
    ...
</ConfigurationFile>

我正在尝试将其读取为 XML 并将其转换为字典。我尝试编写一些这样的代码,但这显然是错误的,因为它无法编译。

Dictionary<string, string> configDictionary = (from configDatum in xmlDocument.Descendants("Config")
                                               select new
                                               {
                                                   Name = configDatum.Attribute("name").Value,
                                                   Value = configDatum.Attribute("value").Value,
                                               }).ToDictionary<string, string>(Something shoudl go here...?);

如果有人能告诉我如何让它工作,那将非常有帮助。当然,我总是可以阅读它

最佳答案

要给出更详细的答案 - 您可以完全按照您在问题中所写的那样使用 ToDictionary。在缺少的部分,您需要指定“键选择器”和“值选择器”,这两个函数告诉 ToDictionary 方法您要转换的对象的哪个部分是键,哪个是键一个值。您已经将这两个提取为匿名类型,因此您可以这样写:

var configDictionary = 
 (from configDatum in xmlDocument.Descendants("Config")
  select new {
    Name = configDatum.Attribute("name").Value,
    Value = configDatum.Attribute("value").Value,
  }).ToDictionary(o => o.Name, o => o.Value);

请注意,我删除了通用类型参数规范。 C# 编译器会自动计算(我们使用的是 overload with three generic arguments )。但是,您可以避免使用匿名类型——在上面的版本中,您只是创建它来临时存储值。最简单的版本就是:

var configDictionary = 
  xmlDocument.Descendants("Config").ToDictionary(
    datum => datum.Attribute("name").Value,
    datum => datum.Attribute("value").Value );

关于c# - 使用LINQ将XML解析成Dictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4800444/

相关文章:

c# - MVC4 将 lambda 从 Controller 传递到存储库

vb.net - LINQ - 按年和月分组

c# - 使用 Linq 计算 2 个日期之间的对象列表

c# - 是否在 foreach 中使用 LINQ 语句重新评估每次迭代的语句

c# - 64 位 Windows 上的注册表重定向

c# - ASP.NET MVC 模型联编程序未正确解析 ISO DateTime

c# - 如何使用 Debugger (VS Professional 2012) 查找事件列表?

c# - IEnumerable 到参数数组

LINQ 分组帮助

c# - 登录不起作用