.net - Class.SelectedItem.Value の null 値の処理

okwaves2024-01-25  12

ボタンのクリック イベントである次のコードがあります。

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

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。