为什么此代码会抛出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();
}
答案 0 :(得分: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();
}
您最有可能在NullReference
声明中获得if
。这样你肯定不会遇到这种情况,最糟糕的情况是如果两个变量都被实例化,但是一个或多个包含空字符串,它只会将Text
设置为empty
。
或者,如果您使用Convert.ToString
其他建议,可以跳过if
语句来简化代码。
lblBookedBy.Text = Convert.ToString(Request.QueryString["Name"]);
lblSno.Text = Convert.ToString(Request.QueryString["Sno"]);
在最坏的情况下,其中一个将是Null
,并且会导致其中一个TextBox显示结果,而另一个则为空。
另外,假设Request.QueryString
支持它,您可以使用TryGetValue。
答案 1 :(得分:1)
您正在尝试将Request.QueryString["Sno"]
投射到字符串,而其值为null
答案 2 :(得分:1)
这很可能是因为集合查询字符串中没有键“Sno”或“Name”,当尝试在其上调用.ToString()时会导致异常。
在调用.ToString()
之前检查Request.QueryString [“Sno”]或Request.QueryString [“Name”]是否为null答案 3 :(得分:1)
如果Request.QueryString["Sno"]
或Request.QueryString["Name"]
没有返回任何对象,则调用ToString会抛出异常
答案 4 :(得分:1)
在null检查中删除.ToString(),因为当查询字符串参数不可用时,您试图将cast null变量键入string ....
if ((string.IsNullOrEmpty(Convert.ToString(Request.QueryString["Sno"]))) && (string.IsNullOrEmpty(Covert.ToString(Request.QueryString["Name"]))))
答案 5 :(得分:-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"]);
}