如果我有这样的字符串:
"Name=Irwin&Home=Caribbean&Preference=Coffee"
C#中是否有一个方法可以将其转换为类似于Request.QueryString的键值对?
答案 0 :(得分:35)
您可以尝试使用HttpUtility.ParseQueryString
。
var nvc = HttpUtility.ParseQueryString(yourString);
答案 1 :(得分:18)
现在,对于最长的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()
更改为{{1}}以取最后一个。
答案 2 :(得分:6)
您也可以使用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]);
答案 3 :(得分:3)
答案 4 :(得分:1)
你应该能够根据&符号和等号分割这个字符串,然后将每个字符串输入一个新的KeyValuePair:
Dictionary<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]);
}
这很简单,并且对字符串的格式做了很多假设,但它适用于您的示例。