Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.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#_Asp.net_Null_Request.querystring - Fatal编程技术网

C# 我应该如何处理可选查询字符串的值?

C# 我应该如何处理可选查询字符串的值?,c#,asp.net,null,request.querystring,C#,Asp.net,Null,Request.querystring,我对C#和ASP.NET还很陌生,所以请在这一点上耐心听我说。我正在设置一个从url接收查询字符串的页面。然后它将这些字符串传递给另一个方法(实际上是在另一个类中),该方法根据查询字符串的值执行许多操作 一般结构如下所示,其中DoSomething()实际上是另一个类的一部分,将由许多不同的页面使用: pretected void Page_Load (object sender, EventArgs e) { DoSomething (Request.QueryString["name

我对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
}
我想知道的是:

  • 如果url中未定义查询字符串“name”,Request.QueryString将返回什么?空字符串<代码>空值
  • 如果它返回
    null
    ,如果我尝试将
    null
    传递给一个需要字符串的方法,会发生什么?整个程序是否崩溃,或者我是否可以在DoSomething()方法中检查
    null
    (在接收到null字符串后)
  • “name”是可选的,因此如果用户没有设置它,我想检测它并将其初始化为某个默认值。但是,如果可能的话,我希望在DoSomething()中进行任何验证,而不是在每个请求字符串的页面上进行检查

    提前谢谢

    1。)它应该返回null 2.)这是可以的,因为字符串可以为空;也就是说,如果查询字符串中没有定义“name”,那么它确实会返回
    null

    。如果试图将null传递给方法(例如
    string.Format
    ),通常会得到
    ArgumentNullException
    。处理此问题的一个好方法是在将值传递到
    DoSomething
    时使用空合并运算符,例如:

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

    既然
    DoSomething
    是你的,你可以选择把这个逻辑放在那里(取决于它是否被重用),以保持你的代码干燥。

    你可以试试看:)如果我不确定某个东西会如何运行,我会打开一个快速测试网站进行测试。在过去,我将类似的东西包装在属性中,这对我来说很好。这取决于您如何使用它,以及您可能希望将值存储在get访问器中的temp变量中的频率。实际上,尝试它不会有什么坏处——我现在正在进行这一过程。不过,因为C#不完全是我的专长,我有点担心我会忽略一些可能最终破坏整个事情的东西。因此,我正在询问专家