Каков наилучший способ узнать, имеет ли RadioButtonList выбранное значение?

Я использую:

if (RadioButtonList_VolunteerType.SelectedItem != null)

или как насчет:

if (RadioButtonList_VolunteerType.Index >= 0)

или как насчет (за ответ Эндрю Харе):

if (RadioButtonList_VolunteerType.Index > -1)

Для тех, кто может прочитать этот вопрос, недействительный метод. Как отметил Келтекс, выбранное значение может быть пустой строкой.

if (string.IsNullOrEmpty(RadioButtonList_VolunteerType.SelectedValue))

Ответы

Ответ 1

С точки зрения удобочитаемости у них у всех нет чего-то для меня. Это кажется хорошим кандидатом для метода расширения.

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


...

if (RadioButtonList_VolunteerType.HasSelectedValue)
{
 // do stuff
}

Ответ 2

Это все действительные и совершенно законные способы проверки выбранного значения. Лично я нахожу

RadioButtonList_VolunteerType.SelectedIndex > -1

чтобы быть наиболее ясным.

Ответ 3

Я рекомендую:

RadioButtonList_VolunteerType.SelectedIndex>=0. 

В соответствии с Документация Microsoft:

Самый низкий порядковый индекс выбранных элементов в списке. Значение по умолчанию равно -1, что означает, что ничего не выбрано.

string.IsNullOrEmpty(RadioButtonList_VolunteerType.SelectedValue) будет не всегда работать, поскольку вы можете иметь ListItem с пустым значением:

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

Ответ 4

Вопрос больше связан с тем, следует ли проверять значение null или проверить значение int. Можно было бы написать также отличный метод расширения Мартина:

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

Документация MSDN для состояния ListControl:

По умолчанию для SelectedItem имеет значение null.

Значение по умолчанию для SelectedIndex равно -1.

Таким образом, оба варианта являются допустимыми и обе работают. Вопрос в том, что это лучший способ. Я предполагаю SelectedIndex, поскольку это операция типа значения, а не операция ссылочного типа. Но у меня нет ничего, чтобы поддержать это.