Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.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从配置文件中读取键值对_C#_Linq_Dictionary - Fatal编程技术网

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

C# 使用LINQ从配置文件中读取键值对,c#,linq,dictionary,C#,Linq,Dictionary,我有一个包含一些密钥对值的文件 key1 = value1 key2 = value2 [section name] key3 = value3 key4 = value4 所以我不关心分区名称,因为键是唯一的。我只想得到输入键的值。我有以下几句话要读 var userDataLines = File.ReadAllLines(pathToFile); 我有类似的东西 var result = userDataLines.Select(userDataLine => userD

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

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);
提供一个集合中的所有键值对

但本质上我想从我的文件中得到一个包含键和值的字典,但不知道如何做到这一点。有人能给我指出正确的方向吗


谢谢

这里有一个LINQ扩展方法:

var result = userDataLines.Select(userDataLine => userDataLine.Split(new[] { '=' }))
                           .Where(split => split.Length == 2)
                           .ToDictionary(split => split[0], split => split[1]);
您可以按如下方式使用:

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

(小的改进:使用而不是,并将每行拆分为。)

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

var dictionary = userDataLines.Select(x => x.Split(new[] { '=' }))
                    .Where(x => x.Length == 2)
                    .ToDictionary(x => x[0], x => x[1]);
我发现Linq更容易阅读,而且我不知道TODICTIONAL方法

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() });