Если у меня есть строка вроде:
"Name=Irwin&Home=Caribbean&Preference=Coffee"
существует ли метод в С#, который может преобразовать его в пару с ключом-значением, аналогичную Request.QueryString?
Если у меня есть строка вроде:
"Name=Irwin&Home=Caribbean&Preference=Coffee"
существует ли метод в С#, который может преобразовать его в пару с ключом-значением, аналогичную Request.QueryString?
Вы можете попробовать использовать HttpUtility.ParseQueryString
.
var nvc = HttpUtility.ParseQueryString(yourString);
И теперь, для самого длинного выражения 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]);
Вы ищете
Вы должны иметь возможность разделить эту строку на основе знаков амперсандов и равных, а затем подать их в новый 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]);
}
Это упрощает и делает много предположений о формате вашей строки, но работает для вашего примера.