首页 > 解决方案 > 如何拆分键值对的字符串并将它们保存到字典中?

问题描述

我有以下代码可以很好地拆分字符串并将键值对保存到字典中。有没有更优雅、更有效的方法来做同样的事情?谢谢!

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

标签: c#.net

解决方案


看起来您正在尝试将查询字符串拆分为查询参数字典。您应该能够使用HttpUtility.ParseQueryString方法。请注意,此方法返回一个NameValueCollection. 该对象可能对您有用,但如果您需要 a Dictionary,您可以使用简单的for循环将 a 转换NameValueCollectionDictionary

此外,如果您出于某种原因决定坚持使用原始代码,则可以大大简化此代码:

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]);

推荐阅读