web-dev-qa-db-ja.com

RadioButtonListに選択された値があるかどうかを確認する最良の方法は何ですか?

私は使っている:

if (RadioButtonList_VolunteerType.SelectedItem != null)

またはどうですか:

if (RadioButtonList_VolunteerType.Index >= 0)

またはどうですか(Andrew Hareの回答による):

if (RadioButtonList_VolunteerType.Index > -1)

この質問を読むかもしれない人には、以下は有効な方法ではありません。 Keltexが指摘したように、選択された値は空の文字列である可能性があります。

if (string.IsNullOrEmpty(RadioButtonList_VolunteerType.SelectedValue))
15
John Bubriski

読みやすさの点では、それらはすべて私にとって何かが欠けています。これは拡張メソッドの良い候補のようです。

public static class MyExtenstionMethods 
{   
  public static bool HasSelectedValue(this RadioButtonList list) 
  {
    return list.SelectedItem != null;
  }
}


...

if (RadioButtonList_VolunteerType.HasSelectedValue)
{
 // do stuff
}
9
Martin Clarke

これらはすべて、選択した値をチェックするための有効で完全に正当な方法です。個人的に私は見つけます

RadioButtonList_VolunteerType.SelectedIndex > -1

最も明確になります。

11
Andrew Hare

私はお勧め:

RadioButtonList_VolunteerType.SelectedIndex>=0. 

Microsoftドキュメント によると:

リスト内の選択されたアイテムの最低序数インデックス。デフォルトは-1で、何も選択されていないことを示します。

string.IsNullOrEmpty(RadioButtonList_VolunteerType.SelectedValue)は、空の値を持つListItemを持つことができるため、常に機能するとは限りません

<asp:ListItem Value=''>This item has no value</asp:ListItem>
0
Keltex

質問は、nullをチェックするか、intの値をチェックするかを中心に展開します。マーティンの素晴らしい拡張メソッドも書くことができます:

public static bool HasSelectedValue(this ListControl list)
{
    return list.SelectedIndex >= 0;
}

ListControlのMSDNドキュメントには、次のように記載されています。

SelectedItemのデフォルトはnull です。

SelectedIndexのデフォルトは-1 です。

したがって、どちらも有効な方法であり、両方とも機能します。問題は、どちらが最善の方法かということです。 SelectedIndexは参照型の操作ではなく、値型の操作であると推測しています。しかし、それを裏付けるものは何もありません。

0
Scotty.NET