使用LINQ从配置文件中读取键值对

时间:2012-05-01 15:44:42

标签: c# linq dictionary

我有一个带有一些密钥对值的文件

key1 = value1
key2 = value2

[section name]
key3 = value3
key4 = value4

所以我不关心部分名称,因为键是唯一的。我只想获取输入键的值。我有以下内容来阅读这些内容。

  var userDataLines = File.ReadAllLines(pathToFile);

我有类似的东西

 var result = userDataLines.Select(userDataLine => userDataLine.Split(new[] { '=' }))
                           .Where(split => split.Length == 2);

为我提供了一个集合中的所有键值对。

但基本上我想从我的文件中获取一个包含键和值的字典,但不知道该怎么做。有人能指引我朝正确的方向发展吗?

由于

4 个答案:

答案 0 :(得分:5)

您可以按如下方式使用ToDictionary Extension Method

var result = File.ReadLines(pathToFile)
                 .Select(line => line.Split(new[] { '=' }, 2))
                 .Where(split => split.Length == 2)
                 .ToDictionary(split => split[0], split => split[1]);

(小改进:使用ReadLines代替ReadAllLines,并将每行拆分为at most 2 parts。)

答案 1 :(得分:2)

有一个LINQ扩展方法:

var result = userDataLines.Select(userDataLine => userDataLine.Split(new[] { '=' }))
                           .Where(split => split.Length == 2)
                           .ToDictionary(split => split[0], split => split[1]);

答案 2 :(得分:0)

您可以使用ToDictionary扩展方法并告诉它哪个元素是键,哪个是值:

var dictionary = userDataLines.Select(x => x.Split(new[] { '=' }))
                    .Where(x => x.Length == 2)
                    .ToDictionary(x => x[0], x => x[1]);

答案 3 :(得分:0)

var result = (from a in userDataLines
              let pairs = a.Split('=')
              where !string.IsNullOrEmpty(a) && !a.Trim().StartsWith("[")
              select new { Key = pairs[0].Trim(), Value = pairs[1].Trim() });

我发现Linq更容易阅读,我不知道ToDictionary方法!