Скрипт для организации длинных цепочек писем в «ящики»

Вот мой поздний вход. Мне не нравились какие-либо другие по разным причинам, поэтому я написал свои собственные.

Эта версия имеет функции:

  • Использование только StringBuilder. Нет вызовов ToArray () или других методов расширения. Это не выглядит так красиво, как некоторые другие ответы, но я считаю это основной функцией, поэтому эффективность важнее, чем наличие «свободного», «однострочного» кода, который скрывает неэффективность.
  • Ручки несколько значений на ключ. (Не нужен он сам, а просто замолчать Маурисио;)
    public string ToQueryString(NameValueCollection nvc)
    {
        StringBuilder sb = new StringBuilder("?");
    
        bool first = true;
    
        foreach (string key in nvc.AllKeys)
        {
            foreach (string value in nvc.GetValues(key))
            {
                if (!first)
                {
                    sb.Append("&");
                }
    
                sb.AppendFormat("{0}={1}", Uri.EscapeDataString(key), Uri.EscapeDataString(value));
    
                first = false;
            }
        }
    
        return sb.ToString();
    }
    

Пример использования

        var queryParams = new NameValueCollection()
        {
            { "x", "1" },
            { "y", "2" },
            { "foo", "bar" },
            { "foo", "baz" },
            { "special chars", "? = &" },
        };

        string url = "http://example.com/stuff" + ToQueryString(queryParams);

        Console.WriteLine(url);

Выход

http://example.com/stuff?x=1&y=2&foo=bar&foo=baz&special%20chars=%3F%20%3D%20%26
0
задан Alex 24 February 2015 в 17:13
поделиться