Каков наилучший способ узнать, имеет ли 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, поскольку это операция типа значения, а не операция ссылочного типа. Но у меня нет ничего, чтобы поддержать это.