在C#中将定界字符串转换为KeyValuePair <string,string>的列表

时间:2019-09-11 20:05:01

标签: c# linq

我的问题与Convert a delimted string to a dictionary<string,string> in C#非常相似,除了我希望Dictionary<String, String>而不是List<KeyValuePair<String, String>>(在我的情况下,这些键值对的顺序很重要)

因此,重新说明我的问题:

我有一个格式为"key1=value1;key2=value2;key3=value3"的字符串。对于上述键值对,我需要将其转换为List<KeyValuePair<String, String>>

我可以不使用LINQ来做到这一点,但是可以使用LINQ来做到吗?以及如何?

2 个答案:

答案 0 :(得分:0)

您必须拆分字符串来做一些棘手的事情。基本上,您需要按主定界符(';')进行拆分,因此最终得到:key1=value1key2=value2key3=value3。然后,您用辅助定界符('=')分割了每个分隔符。 Select转换为新的键值对字符串。它看起来应该类似于:

var str = "key1=value1;key2=value2;key3=value3";

List<KeyValuePair<string, string>> kvp = str.Split(';')
                                            .Select(x => new KeyValuePair<string, string>
                                                      (x.Split('=')[0], x.Split('=')[1]))
                                            .ToList();

编辑:

根据Joel Lucsy的注释中的建议,您可以将选择内容更改为仅拆分一次:

.Select(x => { var p = s.Split('='); return new KeyValuePair<string,string>(p[0],p[1]); })

答案 1 :(得分:0)

尝试用分号分隔,然后用等号分隔每个项目

"key1=value1;key2=value2;key3=value3"
.Split(';')
.Select(x=>{
   var items=x.Split('=');
   return new KeyValuePair<string,string>(items[0],items[1]);
   })
 .ToList()