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