У меня есть серия списков и comboboxes, которые я хочу обновить, так что перечисленные элементы те же, что и перечисленные в IEnumerable<string>
. Я понимаю, что привязка данных может помочь, но я думаю, что теперь это может быть битва, и я бы предпочел избежать этого. я написал что-то вроде этого:Вызов той же функции с ListBox или ComboBox
public static void UpdateListboxWithStrings(
ListControl listcontrol,
IEnumerable<string> stringlist)
{
Object listcontrolitems;
if (listcontrol is ListBox)
{
listcontrolitems =
((ListBox)listcontrol).Items;
}
else if (listcontrol is ComboBox)
{
listcontrolitems =
((ComboBox)listcontrol).Items;
}
else
{
//// Wrong control type.
//// EARLY EXIT
return;
}
int itemscount = listcontrolitems.Count;
/// More code here...
}
... И неприятности начинаются. В зависимости от того, что я добавляю/удаляю, listcontrolitems
отображается неопределенным или должен быть инициализирован, или он не имеет таких свойств, как Count
.
Как вы пишете функцию, которая работает с выпадающим списком или в списке без дублирования кода?
LE. Это приложение Windows, NET Framework 4.5 с использованием System.Windows.Forms
. Я хочу добавить/удалить элементы, подсчитать, получить и установить выделение. Кроме того, могут быть дубликаты. Поэтому преобразование в элементы в строки не будет работать.
Что вы имеете в виду под «работать с выпадающий список»? Если у вас есть новый метод, который вы хотите реализовать, расширьте исходный элемент управления. В качестве альтернативы вы можете передать элемент управления определенному пользователем методу. – NoChance
Какая структура графического интерфейса вы используете? Это важно. Правильный ответ в значительной степени зависит от контекста. Если вы используете Winforms, вы не можете назначить один и тот же тип коллекции из двух разных подклассов ListControl для одной и той же переменной; они не связаны. Вы можете, однако, разыменовать коллекцию в ветви типа вашего кода, сохранив свойство 'Count' в локальной переменной' int', которая, конечно же, может быть разделена. –
@PeterDuniho Как сказано в отредактированном ответе Windows Application. –