我有一个配置文件,如:
<ConfigurationFile>
<Config name="some.configuration.setting" value="some.configuration.value"/>
<Config name="some.configuration.setting2" value="some.configuration.value2"/>
...
</ConfigurationFile>
Run Code Online (Sandbox Code Playgroud)
我试图将其读取为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...?);
Run Code Online (Sandbox Code Playgroud)
如果有人能告诉我如何使这个工作,那将是非常有帮助的.当然,我总是可以阅读它
Tom*_*cek 14
要给出更详细的答案 - 您可以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);
Run Code Online (Sandbox Code Playgroud)
请注意,我删除了泛型类型参数规范.C#编译器自动计算(我们使用带有三个泛型参数的重载).但是,您可以避免使用匿名类型 - 在上面的版本中,您只需创建它以临时存储该值.最简单的版本就是:
var configDictionary =
xmlDocument.Descendants("Config").ToDictionary(
datum => datum.Attribute("name").Value,
datum => datum.Attribute("value").Value );
Run Code Online (Sandbox Code Playgroud)