Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-无空异常访问数组_C#_Try Catch - Fatal编程技术网

C#-无空异常访问数组

C#-无空异常访问数组,c#,try-catch,C#,Try Catch,我必须通过QueryString数组设置这些变量: UtmSource = HttpContext.Current.Request.QueryString["utm_source"]; UtmMedium = HttpContext.Current.Request.QueryString["utm_medium"]; UtmCreative = HttpContext.Current.Request.QueryString["utm_creative"]; UtmCampaign = HttpC

我必须通过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"];
查询字符串中的某些键可能引发null异常

我不想用try-catch包装每个变量,也不想用try-catch包装所有变量,因为如果第一个变量失败,整个变量将为null/避免

如何安全地访问这些变量

if (!String.IsNullOrEmpty(HttpContext.Current.Request.QueryString["utm_term"]))
            {
            }
我能解决这个问题。。 或

编写一个扩展函数来检查对象是否为null,并像使用

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

并给该函数一个返回值,在本例中是“”和空字符串。

当您想要安全地获取查询字符串参数的值时,使用这样的方法怎么样

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

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

  return result;
}

我会使用空合并操作符使它变得简单而漂亮

UtmSource = Request.QueryString["utm_source"] ?? "DefaultValue"
有关操作员的更多信息,请访问。

建议:

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

只有那些有效的将被设置为某物,其他的将被设置为
null
(如果它们可以为null)

这里有一个替代方法,使用内置的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();

您可以尝试添加一个使用QueryString名称调用的函数,并在函数内部处理try catch(如果失败,则将返回值设置为默认值)。