2

为什么这段代码会抛出一个NullReferenceException

例外:

System.NullReferenceException: Object reference not set to an instance of an object.

代码:

if ((string.IsNullOrEmpty(Request.QueryString["Sno"].ToString())) 
   && (string.IsNullOrEmpty(Request.QueryString["Name"].ToString())))
{
    lblBookedBy.Text = "";
    lblSno.Text = "";
}
else
{
    lblBookedBy.Text = Request.QueryString["Name"].ToString();
    lblSno.Text = Request.QueryString["Sno"].ToString();
}
4

6 回答 6

2

我建议执行以下操作。

if (Request.QueryString["Sno"] == null || Request.QueryString["Name"] == null)
{
    lblBookedBy.Text = "";
    lblSno.Text = "";
}
else
{
    lblBookedBy.Text = Request.QueryString["Name"].ToString();
    lblSno.Text = Request.QueryString["Sno"].ToString();
}

你很可能NullReferenceif声明中得到一个。这样你肯定不会遇到这种情况,最坏的情况是如果两个变量都被实例化,但一个或多个包含一个空字符串,它会简单地设置Textempty.

或者,如果您使用Convert.ToString尽可能多的其他建议,您可以通过跳过if语句来简化代码。

lblBookedBy.Text = Convert.ToString(Request.QueryString["Name"]);
lblSno.Text = Convert.ToString(Request.QueryString["Sno"]);

在最坏的情况下,其中之一将是Null,并将导致其中一个 TextBoxes 显示结果,而另一个是空的。

此外,假设Request.QueryString支持它,您可以使用TryGetValue

于 2013-03-15T11:05:12.877 回答
1

在空检查中删除 .ToString() ,因为当查询字符串参数不可用时,您正在尝试将空变量类型转换为字符串...。

if ((string.IsNullOrEmpty(Convert.ToString(Request.QueryString["Sno"]))) && (string.IsNullOrEmpty(Covert.ToString(Request.QueryString["Name"]))))
于 2013-03-15T11:01:01.147 回答
1

您正在尝试转换Request.QueryString["Sno"]为字符串,而它的值是null

于 2013-03-15T10:50:32.723 回答
1

这很可能是因为集合查询字符串中没有键“Sno”或“Name”,这会在尝试对其调用 .ToString() 时导致异常。

在调用 .ToString() 之前检查 Request.QueryString["Sno"] 或 Request.QueryString["Name"] 是否为空

于 2013-03-15T10:51:19.240 回答
1

如果Request.QueryString["Sno"]Request.QueryString["Name"]不返回任何对象而不是调用 ToString 将引发异常

于 2013-03-15T10:51:47.347 回答
-1

使用Convert.ToString()而不是.ToString()避免空引用异常:

if (string.IsNullOrEmpty(Convert.ToString(Request.QueryString["Sno"])) && string.IsNullOrEmpty(Covert.ToString(Request.QueryString["Name"])))
{
    lblBookedBy.Text = "";
    lblSno.Text = "";
}
else
{
    lblBookedBy.Text =Convert.ToString(Request.QueryString["Name"]);
    lblSno.Text =Convert.ToString(Request.QueryString["Sno"]);
}
于 2013-03-15T10:51:37.637 回答