var configPairs = mqttConfig.Split(';') .Select(pair => pair.Split('=')) .Where(parts => parts.Length == 2) .ToDictionary(parts => parts[0].Trim(), parts => parts[1].Trim(), StringComparer.OrdinalIgnoreCase);
1、分割配置字符串:
mqttConfig.Split(';')
首先,使用分号(;)作为分隔符,将原始的配置字符串mqttConfig分割成一个字符串数组。每个元素都是一个独立的键值对字符串,形如 "key=value"。
2、转换并筛选:
.Select(pair => pair.Split('='))
.Where(parts => parts.Length == 2)
Select方法遍历上一步得到的每个键值对字符串,对每个字符串再使用等号(=)进行分割,将其转换成一个字符串数组(包含键和值)。
Where方法进一步过滤这些数组,仅保留长度为2的数组,确保每个键值对都是由一个键和一个值组成,从而排除掉格式错误的条目。
3、构建字典:
.ToDictionary(parts => parts[0].Trim(), parts => parts[1].Trim(), StringComparer.OrdinalIgnoreCase)
最后,使用ToDictionary方法将筛选后的键值对数组转换成一个字典。这个方法接受两个Lambda表达式作为参数,分别用来提取键和值:
parts[0].Trim() 作为键,表示取分割后的第一个元素(键),并去除首尾空白。
parts[1].Trim() 作为值,表示取分割后的第二个元素(值),同样去除首尾空白。
StringComparer.OrdinalIgnoreCase 参数指定了字典在比较键时应忽略大小写,这样在通过键访问字典时,不论键的大小写如何都能正确匹配。