Как проанализировать строку запроса в NameValueCollection в.NET

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

181
задан SharpC 1 November 2016 в 06:07
поделиться

6 ответов

Существует встроенная утилита.NET для этого: HttpUtility. ParseQueryString

// C#
NameValueCollection qscoll = HttpUtility.ParseQueryString(querystring);
' VB.NET
Dim qscoll As NameValueCollection = HttpUtility.ParseQueryString(querystring)

Вы, возможно, должны заменить querystring new Uri(fullUrl).Query.

349
ответ дан Carl Onager 23 November 2019 в 06:08
поделиться

Подбросьте Запрос ударом. QueryString. Ключи для NameValueCollection всех параметров строки запроса.

0
ответ дан Mark Glorie 23 November 2019 в 06:08
поделиться

Просто Запрос доступа. QueryString. AllKeys упомянул, поскольку другой ответ просто получает Вас массив ключей.

1
ответ дан Bloodhound 23 November 2019 в 06:08
поделиться
    private void button1_Click( object sender, EventArgs e )
    {
        string s = @"p1=6&p2=7&p3=8";
        NameValueCollection nvc = new NameValueCollection();

        foreach ( string vp in Regex.Split( s, "&" ) )
        {
            string[] singlePair = Regex.Split( vp, "=" );
            if ( singlePair.Length == 2 )
            {
                nvc.Add( singlePair[ 0 ], singlePair[ 1 ] );    
            }    
        }
    }
2
ответ дан rp. 23 November 2019 в 06:08
поделиться

HttpUtility. ParseQueryString будет работать, пока Вы находитесь в веб-приложении или не возражаете включая зависимость от Системы. Сеть. Другой способ сделать это:

NameValueCollection queryParameters = new NameValueCollection();
string[] querySegments = queryString.Split('&');
foreach(string segment in querySegments)
{
   string[] parts = segment.Split('=');
   if (parts.Length > 0)
   {
      string key = parts[0].Trim(new char[] { '?', ' ' });
      string val = parts[1].Trim();

      queryParameters.Add(key, val);
   }
}
43
ответ дан Scott Dorman 23 November 2019 в 06:08
поделиться

Я хотел удалить зависимость от System.Web, чтобы я мог анализировать строку запроса развертывания ClickOnce, имея при этом предварительные условия, ограниченные «Подмножеством клиентской инфраструктуры».

Мне понравился ответ rp. Я добавил некоторую дополнительную логику.

public static NameValueCollection ParseQueryString(string s)
    {
        NameValueCollection nvc = new NameValueCollection();

        // remove anything other than query string from url
        if(s.Contains("?"))
        {
            s = s.Substring(s.IndexOf('?') + 1);
        }

        foreach (string vp in Regex.Split(s, "&"))
        {
            string[] singlePair = Regex.Split(vp, "=");
            if (singlePair.Length == 2)
            {
                nvc.Add(singlePair[0], singlePair[1]);
            }
            else
            {
                // only one key with no value specified in query string
                nvc.Add(singlePair[0], string.Empty);
            }
        }

        return nvc;
    }
19
ответ дан 23 November 2019 в 06:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: