如果我有一個字符串,像這樣:轉換查詢字符串鍵值對在.net
"Name=Irwin&Home=Caribbean&Preference=Coffee"
有沒有在C#中的方法,可以將其轉換成類似的Request.QueryString一個鍵值對?
如果我有一個字符串,像這樣:轉換查詢字符串鍵值對在.net
"Name=Irwin&Home=Caribbean&Preference=Coffee"
有沒有在C#中的方法,可以將其轉換成類似的Request.QueryString一個鍵值對?
你應該能基礎上,與號拆分此字符串和等號,然後喂每一個到一個新的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]);
}
這很簡單,並對字符串的格式作了很多假設,但它適用於您的示例。
而現在,最長的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在我的情況下,比我接受的解答更有幫助,因爲我正在尋找解析style = string = key的情況:value [; key:value] ... – 2012-09-27 20:14:17
實際上,這並不是所有的那麼長時間LINQ表達式:-p。另外,如果這真的打算解析類似查詢的字符串,那麼對['Uri.UnescapeDataString()']的調用(https://msdn.microsoft.com/zh-cn/library/system.uri .unescapedatastring%28V = vs.110%29.aspx)? – binki 2016-03-07 18:57:52
@binki你是對的(在第二個):-)增加...在長度上,後代將決定:-) – xanatos 2016-03-07 19:37:59
您也可以使用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]);
如果你不想依賴於System.Web,這就是要走的路,例如如果您正在開發一個輸入或輸出查詢字符串格式的API。 – 2016-08-08 14:42:36
這是有幫助嗎? http://stackoverflow.com/questions/68624/how-to-parse-a-query-string-into-a-namevaluecollection-in-net – MyDaftQuestions 2014-03-12 13:02:18