Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ将XML解析为字典_C#_Linq - Fatal编程技术网

C# 使用LINQ将XML解析为字典

C# 使用LINQ将XML解析为字典,c#,linq,C#,Linq,我有一个配置文件,例如: <ConfigurationFile> <Config name="some.configuration.setting" value="some.configuration.value"/> <Config name="some.configuration.setting2" value="some.configuration.value2"/> ... </ConfigurationFile>

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

<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...?);
Dictionary configDictionary=(来自xmlDocument.subjects(“Config”)中的configDatum)
选择新的
{
Name=configDatum.Attribute(“Name”).Value,
Value=configDatum.Attribute(“Value”).Value,
}).ToDictionary(应该放在这里的东西…?);

如果有人能告诉我如何让这个工作,这将是非常有帮助的。当然,我可以随时阅读它

您对
ToDictionary
的调用需要一个键和值选择器。从你拥有的开始,它可以是

var dictionary = yourQuery.ToDictionary(item => item.Name, item => item.Value);

要给出更详细的答案,您可以完全按照您在问题中所写的那样使用
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#编译器会自动计算(我们使用的是一个)。但是,您可以避免使用匿名类型-在上面的版本中,您只需创建它来临时存储值。最简单的版本是:

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

不需要查询,因为您只是在进行投影。将投影移动到调用
ToDictionary()


对不起,我不太清楚。这个代码会去哪里?
var configDictionary = xmlDocument.Descendants("Config")
                                  .ToDictionary(e => e.Attribute("name").Value,
                                                e => e.Attribute("value").Value);