C # - доступ к массиву без исключения NULL - PullRequest
2 голосов
/ 30 ноября 2011

Мне нужно установить эти переменные с помощью массива QueryString:

UtmSource = HttpContext.Current.Request.QueryString["utm_source"];
UtmMedium = HttpContext.Current.Request.QueryString["utm_medium"];
UtmCreative = HttpContext.Current.Request.QueryString["utm_creative"];
UtmCampaign = HttpContext.Current.Request.QueryString["utm_campaign"];
UtmTerm = HttpContext.Current.Request.QueryString["utm_term"];
UtmContent = HttpContext.Current.Request.QueryString["utm_content"];
Tag1 = HttpContext.Current.Request.QueryString["utm_source"];
Tag2 = HttpContext.Current.Request.QueryString["m"];

Некоторые ключи в строке запроса могут выдавать нулевое исключение.

Я не хочу оборачивать каждую переменную в try catch, и я не хочу оборачивать все в try catch, потому что, если первая не удастся, все будет нулевым / исключено.

Как мне безопасно получить доступ к этим переменным?

Ответы [ 5 ]

6 голосов
/ 30 ноября 2011

Я бы использовал оператор null-coalescing , чтобы сделать его красивым и простым

UtmSource = Request.QueryString["utm_source"] ?? "DefaultValue"

Подробнее об этом операторе можно прочитать на MSDN .

3 голосов
/ 30 ноября 2011

как насчет использования такого метода, когда вы хотите безопасно получить значение параметра строки запроса?

public string getQueryStringValueOrEmpty(string key)
{
  string result = HttpContext.Current.Request.QueryString[key];

  if(result == null)
  {
    result = string.Empty;
  }

  return result;
}
1 голос
/ 30 ноября 2011

Вот альтернатива, которая использует встроенный ParseQueryString и NameValueCollection, чтобы пропустить некоторую занятую работу.Я тоже пытался использовать .IsNullOrEmpty, но мое консольное приложение сопротивлялось.

Uri tempUri = new Uri("http://microsoft.com/Default.aspx?IsMonkeyBusiness=true&Name=Daniel&Test=");
string sQuery = tempUri.Query;
NameValueCollection qscoll = HttpUtility.ParseQueryString(sQuery);
foreach (string s in qscoll)
    foreach (string v in qscoll.GetValues(s))
        if (!(v=="")) Console.WriteLine("{0}",v);
Console.ReadLine();
1 голос
/ 30 ноября 2011

Предложение:

UtmSource = (Request.QueryString.ContainsKey("utm_source")) ? Request.QueryString["utm_source"] : null;

Только те, которые действительны, будут установлены на что-то, остальные будут установлены на null (если они обнуляются)

0 голосов
/ 30 ноября 2011
if (!String.IsNullOrEmpty(HttpContext.Current.Request.QueryString["utm_term"]))
            {
            }

может решить эту проблему .. или;

написать расширенную функцию, чтобы проверить, является ли объект нулевым или нет, и использовать его как

HttpContext.Current.Request.QueryString["utm_term"].checkNull("");

и передайте этой функции возвращаемое значение, в этом примере его "" и пустую строку.

...