0

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

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

4 回答 4

5

您可以使用ToDictionary 扩展方法,如下所示:

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,并将每行最多分成2 个部分。)

于 2012-05-01T15:47:15.943 回答
2

有一个 LINQ 扩展方法:

var result = userDataLines.Select(userDataLine => userDataLine.Split(new[] { '=' }))
                           .Where(split => split.Length == 2)
                           .ToDictionary(split => split[0], split => split[1]);
于 2012-05-01T15:47:15.083 回答
0

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

var dictionary = userDataLines.Select(x => x.Split(new[] { '=' }))
                    .Where(x => x.Length == 2)
                    .ToDictionary(x => x[0], x => x[1]);
于 2012-05-01T15:49:01.847 回答
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 方法!

于 2012-05-01T15:49:57.903 回答