如果我有一个字符串,例如:
"Name=Irwin&Home=Caribbean&Preference=Coffee"
在C#中是否有一种方法可以将它转换为类似于Request.QueryString的键值对?
HttpUtility.ParseQueryString
。var nvc = HttpUtility.ParseQueryString(yourString);
ParseQueryString
已经返回了该类型。 - Oded现在,让我们来看一下最长的LINQ表达式...
var dict = "Name=Irwin&Home=Caribbean&Preference=Coffee"
.Split('&')
.Select(p => p.Split('='))
.ToDictionary(p => p[0], p => p.Length > 1 ? Uri.UnescapeDataString(p[1]) : null);
但请注意,如果有多个相同名称的键,则会抛出异常。
如果您想要保护自己免受此类情况,请添加:
.GroupBy(p => p[0]).Select(p => p.First())
在.ToDictionary
之前(并且在.Select
之后),
这将获取多个键值对中的第一个key=value
。将.First()
改为.Last()
以获取最后一个。
您还可以使用ToDictionary()方法:
var input = "Name=Irwin&Home=Caribbean&Preference=Coffee";
var items = input.Split(new[] { '&' });
var dict = items.Select(item => item.Split(new[] {'='})).ToDictionary(pair => pair[0], pair => pair[1]);
HttpUtility
方法的不错替代方案。 - Wolfgang SchreursDictionary<string, string> myValues = new Dictionary<string,string>();
string[] elements = myString.Split('=','&');
for(int i=0;i<elements.Length; i+=2)
{
myValues.Add(elements[i], elements[i+1]);
}
这个方法很简单,但是它对于字符串格式做了很多假设,不过它可以解决你的问题。