Долго бился над этим вопросом, штудируя литературу и неистово насилуя гугл, но так и не нашел решения, может кто здесь подскажет.
Начну с самого начала. У меня есть три класса, которые реализуют свойства одного и того же интерфейса:
interface IStandartUnit
{
int ID { get; set; }
string Name { get; set; }
}
Классы приводить не буду полностью (много конфиденциальной информации, да и не нужна она здесь):
public class UnitDepartment : IStandartUnit //подразделения
public class UnitFilial : IStandartUnit //филиалы
public class UnitPerson : IStandartUnit //сотрудники
Для отображения списка по каждому из классов использую CheckedListBox (почему? - лирика, к делу не особо относящаяся.). В процессе выполнения возникла необходимость в создании метода расширения для CheckedListBox дабы по переданному ID вычислять индекс элемента в списке. Например, вот так:
public static class ListBoxExtension
{
public static int GetUnitIndexById(this CheckedListBox clb, int _id)
{
int i = 0;
foreach(UnitFilial uf in clb.Items)
{
if (uf.ID == _id)
{
break;
}
i++;
}
return i;
}
}
Вообще, в результате должно получиться следующее: я передаю ID и bool-состояние в метод расширения для CheckedListBox и метод меняет свойство Checked у элемента списка на переданное. Но я решил начать с простого подхода, просто ища индекс. Сложность вот в чем: мне необходим универсальный метод расширения для списков всех трех классов. Кто еще не понял - я использую классы добавляя их экземпляры в CheckedListBox (ToString() прописан в каждом классе, не волнуйтесь =Р). Не смешивая. Один список - один класс.
Итоговый вопрос. Могу ли я каким то образом реализовать нечто вроде этого чтобы оно работало:
public static class ListBoxExtension
{
public static void SetUnitState(this CheckedListBox clb, int _id, bool _state)
{
int i = 0;
foreach(IStandartUnit su in clb.Items)
{
if(su.ID == _id)
{
break;
}
i++;
}
clb.SetItemChecked(i, _state);
}
}
Буду рад любым советам, касающимся дела. Спасибо.
UPD: Прошу прощения за то что отнял ваше время. Код работает как должен. Это я просто тупенький. Надеюсь, что инфа в вопросе не будет бесполезной, авось кому-то да пригодится.
Оно так и работает:
public static class ListBoxExtension
{
public static void SetUnitState(this CheckedListBox clb, int _id, bool _state)
{
int i = 0;
foreach(IStandartUnit su in clb.Items)
{
if(su.ID == _id)
{
break;
}
i++;
}
clb.SetItemChecked(i, _state);
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Помогите разобраться с проблемойПосле синхронизации репозитория с azure devops, у меня с двумя формами в проекте возникает проблема
В базе есть таблица "Users", в ней есть колонка user_id (числовое значение) Любой юзер может создать объявление(строку) в таблице "obj", которому будет...
Всем привет мне надо сделать древовидную структуру!