ボタンのクリック イベントである次のコードがあります。
protected void btnSave_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
CheckBoxList cbl = btn.Parent.FindControl("chkbx_list") as CheckBoxList;
if (cbl.SelectedItem.Value != null) //***Exception is thrown here***
{
//Do Stuff
}
}
cbl.SelectedItem.Value の値が null かどうかを確認するにはどうすればよいですか? 「参考」にしようとした瞬間。この値を指定すると、アプリケーションは次のエラーをスローします。
System.NullReferenceException: 'Object reference not set to an instance of an object.'
System.Web.UI.WebControls.ListControl.SelectedItem.get returned null.
1
次に、null チェックを実行します。また、キャストまたは検索コントロールが実際に null を返しているため、null である可能性があり、これが XY 問題になる可能性があります。
– ンコシ
2020 年 9 月 3 日 16:34
実際の Web コントロールのキャストが null を返さないことが確認できました。 null チェックを行うと言ったとき、それは「if (cbl.SelectedItem.Value != null)」を使って行うことではありません。 ?それとも別の種類の「null チェック」があるのでしょうか。私がよく知らないことは何でしょうか?
– ジェイク
2020 年 9 月 3 日 19:54
問題は、SelectedItem が null で、null インスタンスからメンバーにアクセスしようとしているということです。 if (cbl.SelectedItem != null && cbl.SelectedItem.Value != null)
– ンコシ
2020 年 9 月 3 日 20:24
------------------------
例外メッセージによると、問題は SelectedItem が null であり、その null インスタンスからメンバーにアクセスしようとしているということです。
null 参照例外を避けるために、アクセスするメンバーが null ではないことを最初に確認します。
詳細なアプローチは次のとおりです
if (cbl.SelectedItem != null && cbl.SelectedItem.Value != null)
または null 条件演算子を使用する
if (cbl?.SelectedItem?.Value != null)
2
これは理にかなっていると思います。したがって、SelectedItem が null の場合 (null が依然として「値」である場合)、SelectedItem.Value は null ではありません。むしろ、それは単に存在しません。そうですか?
– ジェイク
2020 年 9 月 4 日 13:08
1
SelectedItem が null の場合、そのメンバーのいずれか (この場合は .Value) にアクセスしようとします。null 参照から値にアクセスしようとしていることを意味します (OOP ではデフォルトで許可されていません)。そのため、例外 (NullReferenceException) が発生します。
– ンコシ
2020 年 9 月 4 日 14:37
------------------------
問題は、null オブジェクトが null かどうかを確認する前に、null オブジェクトに対して toString() メソッドを使用しようとしているということです。
最初に親オブジェクトの値を確認する必要があります。
コメントできないため、問題の変更に応じて回答を変更する必要があります。オブジェクトのキャストのキーワードとして使用すると、キャストが失敗した場合に null が返されることがあります。最初に cbl 値をチェックして、null かどうかを確認してください。 .
共有
この回答を改善します
フォローする
編集
2020 年 9 月 3 日 16:26
2020 年 9 月 3 日 16:19 に回答
ユーザー5827423
ユーザー5827423
3
質問内でコードを誤って入力したため、修正しました。 ToString() メソッドを呼び出さなくても、同じエラーが発生します。
– ジェイク
2020 年 9 月 3 日 16:22
CheckboxList "cbl" が設定されていることを確認できます。ある。同様の行に、次のような偽の Web コントロール名を追加しました。 CheckBoxList cbl = btn.Parent.FindControl("chkbx_list123456789") as CheckBoxList;偽の名前は null 値を返しましたが、本当の名前は機能します.
– ジェイク
2020 年 9 月 3 日 19:09
cbl は null オブジェクトではないため、Nkosi の解決策は正しいと思われます。 @ジェイク
–
user5827423
2020 年 9 月 4 日 9:28