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ステートメントに含まれています。このようにして、これに遭遇することはありません。両方の変数がインスタンス化されているが、1つ以上に空の文字列が含まれている場合、最悪の場合は単にに設定さTextemptyます。

または、他の多くの提案を使用する場合は、ステートメントConvert.ToStringをスキップしてコードを簡略化できます。if

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

最悪のシナリオでは、これらの1Nullつはであり、結果を表示するTextBoxの1つになり、もう1つは空になります。

また、がそれをサポートしていると仮定すると、 TryGetValueRequest.QueryStringを使用できます。

于 2013-03-15T11:05:12.877 に答える
1

Request.QueryString["Sno"]null

于 2013-03-15T10:50:32.723 に答える
1

これは、コレクションクエリ文字列にキー「Sno」または「Name」がないために発生する可能性があり、.ToString()を呼び出そうとすると例外が発生します。

.ToString()を呼び出す前に、Request.QueryString["Sno"]またはRequest.QueryString["Name"]がnullかどうかを確認してください

于 2013-03-15T10:51:19.240 に答える
1

ToStringを呼び出すよりもオブジェクトを返さない場合は、例外がスローされRequest.QueryString["Sno"]ますRequest.QueryString["Name"]

于 2013-03-15T10:51:47.347 に答える
1

クエリ文字列パラメータが使用できない場合、キャストnull変数を文字列に入力しようとしているため、nullチェックで.ToString()を削除します。

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

null参照例外を回避する代わりに、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 に答える