c# - 如何拆分键值对的字符串并将它们保存到字典中?
问题描述
我有以下代码可以很好地拆分字符串并将键值对保存到字典中。有没有更优雅、更有效的方法来做同样的事情?谢谢!
private void SplitString()
{
string testConfig = "application?test1=value1&test2=value2&test3=value3";
var dict = new Dictionary<string, string>();
if (!string.IsNullOrEmpty(testConfig) && testConfig.Contains("?"))
{
string parameters = testConfig.Substring(testConfig.LastIndexOf("?") + 1);
string[] parameterArray = parameters.Split(new char[] { '&' }, StringSplitOptions.RemoveEmptyEntries);
if (parameterArray.Length > 0)
{
foreach (var item in parameterArray)
{
string[] param = item.Split(new char[] { '=' });
if (param.Length == 2)
{
switch (param[0].ToUpper())
{
case "TEST1":
dict.Add("TEST1", param[1]);
break;
case "TEST2":
dict.Add("TEST2", param[1]);
break;
case "TEST3":
dict.Add("TEST3", param[1]);
break;
}
}
}
}
}
}
解决方案
看起来您正在尝试将查询字符串拆分为查询参数字典。您应该能够使用HttpUtility.ParseQueryString方法。请注意,此方法返回一个NameValueCollection
. 该对象可能对您有用,但如果您需要 a Dictionary
,您可以使用简单的for
循环将 a 转换NameValueCollection
为Dictionary
。
此外,如果您出于某种原因决定坚持使用原始代码,则可以大大简化此代码:
switch (param[0].ToUpper())
{
case "TEST1":
dict.Add("TEST1", param[1]);
break;
case "TEST2":
dict.Add("TEST2", param[1]);
break;
case "TEST3":
dict.Add("TEST3", param[1]);
break;
}
您不需要case
为每个可能的值单独设置。相反,您可以简单地这样写:
dict.Add(param[0].ToUpper(), param[1]);
推荐阅读
- angular - 尝试在 Angular 中为 Google 图表创建新的 DataTable 时无法识别 google.visialization 类
- jquery - 如何将 DateTimePicker-time-interval 添加到 DateTimePicker-inputs 作为 disabledTimeIntervals?
- azure-active-directory - 无法使用 Microsoft Graph API 获得管理员同意和访问令牌
- python - 包含变量类型的打印语句
- java - 如何查看参数格式(例如 /verify
) while typing?
- c++ - Can't pass twice pointer with braces
- python-3.7 - 我试图制作一个没有 pygame(带字母)的控制台游戏。但我不知道我必须写什么
- angular - Structural directives and lazy loaded modules inheritance
- android - Data consumption for on-demand map downloading
- r - 同一情节中的不同配色方案