Как мне обработать значения необязательных строк запроса? - PullRequest
2 голосов
/ 03 ноября 2010

Я довольно новичок в C # и ASP.NET, так что потерпите меня на этом.Я настраиваю страницу, которая получает строки запроса от URL.Затем он передает эти строки другому методу (фактически, в другом классе), который продолжает делать много вещей в зависимости от значения строки запроса.

Общая структура выглядит примерно так, где DoSomething() фактически является частью другого класса, который будет использоваться многими различными страницами:

pretected void Page_Load (object sender, EventArgs e)
{
    DoSomething (Request.QueryString["name"]);
}

public void DoSomething (string UrlVariable)
{
    // if UrlVariable isn't set, initialize it to some value
    // do stuff with UrlVariable
}

Вот что мне интересно:

  1. Если строка запроса "name" нене определено в URL, что возвращает Request.QueryString?пустая строка?null?
  2. Если он возвращает null, что произойдет, если я попытаюсь передать null методу, ожидающему строку?Разве вся программа разваливается, или я могу проверить null внутри метода DoSomething () (после получения пустой строки)?

«Имя» является необязательным, поэтому, если пользователь нене установить его, я хотел бы обнаружить это и инициализировать его к некоторому значению по умолчанию.Однако, если возможно, я бы хотел поместить любую проверку в DoSomething (), вместо того, чтобы выполнять проверку на каждой странице, которая запрашивает строку.

Заранее спасибо!

Ответы [ 2 ]

4 голосов
/ 03 ноября 2010

Если «name» не определено в строке запроса, оно действительно вернет null.Если вы попытаетесь передать null методу (например, string.Format), вы получите ArgumentNullException.Хороший способ справиться с этим - использовать оператор с нулевым слиянием при передаче значения в DoSomething, например:

DoSomething (Request.QueryString["name"] ?? "MyDefaultString");

Так как DoSomething ваша, вы можете поместить эту логику втам (в зависимости от того, используется ли он повторно или нет), чтобы сохранить ваш код СУХИМ.

1 голос
/ 03 ноября 2010

1.) Должен возвращать ноль 2.) это нормально, потому что строки обнуляются; при этом вы хотели бы проверить, чтобы он был нулевым с начала функции, как вы указали

...