我为这个问题苦苦挣扎了很久,研究文学,疯狂地强奸谷歌,但我没有找到解决办法,也许这里有人会告诉你。
我将从头开始。我有三个实现相同接口属性的类:
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() 写在每个类中,不用担心 =P)。不混合。一份清单 - 一类。
最后一个问题。我可以以某种方式实现这样的事情以使其工作:
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:我很抱歉占用您的时间。代码可以正常工作。只是我笨。我希望问题中的infa不会无用,也许有人会派上用场。
它是这样工作的: