在C#中将分隔的字符串转换为字典

我有一个格式为“key1 = value1; key2 = value2; key3 = value3;”的字符串

我需要将它转换为上述键值对的字典。

最好的方法是什么? 谢谢。

像这样的东西?

 var dict = text.Split(new[] {';'}, StringSplitOptions.RemoveEmptyEntries) .Select(part => part.Split('=')) .ToDictionary(split => split[0], split => split[1]); 

当然,如果不满足这些假设,这将失败。 例如,如果文本格式不正确,则可能抛出IndexOutOfRangeException ,如果存在重复键,则抛出ArgumentException 。 这些场景中的每一个都需要不同的修改。 如果可能存在冗余空白,则可能需要一些string.Trim调用。

更新了Ani,以考虑最后的半冒号。 where子句将确保在创建和输入之前有一个键和值。

 var dictionary = "key1=value1;key2=value2;key3=value3;" .Split(';') .Select (part => part.Split('=')) .Where (part => part.Length == 2) .ToDictionary (sp => sp[0], sp => sp[1]); 

看到令人敬畏的空白忽略,纠正具有或没有正则表达式的分号能力的最后值:

  var dict = Regex.Matches("key1 = value1; key2 = value2 ; key3 = value3", @"\s*(.*?)\s*=\s*(.*?)\s*(;|$)") .OfType() .ToDictionary(m => m.Groups[1].Value, m => m.Groups[2].Value); 

但严重的是,Ani值得.ToDictionary()的道具。 我永远不会想到这一点。

你可以这样写它或循环它自己做。 无论哪种方式。 最终,你正在分裂; 获取项目对,然后在=获取密钥和值。

 string input = "key1=value1;key2=value2;key3=value3;"; Dictionary dictionary = input.TrimEnd(';').Split(';').ToDictionary(item => item.Split('=')[0], item => item.Split('=')[1]); 

循环版:

 Dictionary dictionary = new Dictionary(); string[] items = input.TrimEnd(';').Split(';'); foreach (string item in items) { string[] keyValue = item.Split('='); dictionary.Add(keyValue[0], keyValue[1]); } 

您可以使用JSON字符串执行此操作,例如:

 var dic = JsonConvert.DeserializeObject>("{'1':'One','2':'Two','3':'Three'}");