2

我对 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. 如果 url 中没有定义查询字符串“name”,Request.QueryString 会返回什么?一个空字符串?null?
  2. 如果它返回null,如果我尝试传递null给期望字符串的方法会发生什么?整个程序是否崩溃,或者我可以检查nullDoSomething() 方法内部(在收到空字符串后)?

“名称”是可选的,所以如果用户没有设置它,我想检测它并将其初始化为某个默认值。但是,如果可能的话,我想在 DoSomething() 中进行任何验证,而不是对请求字符串的每个页面进行检查。

提前致谢!

4

2 回答 2

4

如果查询字符串中没有定义“name”,它确实会返回null. 如果您尝试将 null 传递给方法(string.Format例如),您通常会得到一个ArgumentNullException. DoSomething处理此问题的一个好方法是在将值传递给例如时使用空合并运算符:

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

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

于 2010-11-03T17:25:06.447 回答
1

1.) 它应该返回 null 2.) 这没关系,因为字符串可以为空;话虽如此,正如您指出的那样,您希望从函数的开头检查它是否为空

于 2010-11-03T17:25:00.030 回答