我遇到的基本问题是:当我将要在下面描述的List" myElements"变得更大时,我编写它的方式中的代码是否仍然有效地执行。在最终程序中,此List将包含大约2000个或更多对象。我们走了:
我必须解决的任务是提供一个应用程序,使用户能够搜索具有某些属性的元素。到目前为止,这些元素以下列方式实现:
public abstract class BaseClass
{
public string property1;
public string property2;
//+ lots of more properties (ca. 30) that all derived classes contain
BaseClass()
{
property1 = String.Empty;
property2 = String.Empty;
}
}
public DerivedClass1 : BaseClass
{
public string property3;
//property that only this derived class contatins
DerivedClass(string prop1, string prop2)
{
this.property1 = prop1;
this.property2 = prop2;
property3 = "prop3";
}
}
//+ more derived classes and derivations from them also
稍后在代码中,实例创建如下:
DerivedClass myObj1 = new DerivedClass("text1", "text2");
DerivedClass myObj2 = new DerivedClass("text3", "text4");
这是列表的来源:最后,这些对象被添加到列表中:
myElements.Add(myObj1);
myElements.Add(myObj2);
//+ List will contain around 2000 objects
我知道要做的是创建下拉菜单。这些菜单将出现在不同列的窗体中。第一列将包含允许用户选择BaseClass包含的属性的组合框。在上面的例子中,其中一个框中的可选择选项(代表property1的值)将是" text1"和" text3"。
现在,根据基类中此属性的值,用户将在第二列comboBox中显示不同的结果。在这里,我们只有一个DerivedClass,因此下拉列表中只有一个选项:" prop3"。想象一下,还有一个DerivedClass可以包含一个带代码
的构造函数DerivedClass(string prop4)
{
prop4 = "text5";
}
我有一个来自这个类的对象,值" text5"也应该出现在第二列的comboBox中。
最后要知道,所有组合框的数量都是由foreach循环完成的,这些循环遍历列表中的所有元素" myElements"如果此项目尚未包含在框的项目列表中,则将项目添加到组合框。这是逐步完成的:用户第一次单击按钮 - 第一列组合框被填充,用户第二次单击相同的按钮 - 第二列组合框被填充(结果取决于用户在第一列框中选择的值)。
我的基本问题:每次用户点击按钮时,都会使用foreach循环填充组合框,该循环遍历列表中的所有元素" myElements"。如果列表变大,这对我来说似乎是一个非常愚蠢的解决方案,尤其是在填充第一列时。如果有两个类直接从BaseClass派生,并且其构造函数定义了property1的值,那么用户需要在第一列组合框中看到的值在程序的早期阶段就已知。
我可以在不浏览整个元素列表的情况下访问这些值吗?使用常识,我问自己:如果有两个派生类,并且因此定义了property1的两个构造函数,必须有搜索的方法,不是通过滚动2000个对象来找到这两个值,而是通过某种方式只做两个步骤。
这种方式存在吗?如上所述,我需要学习如何实现它?
此外:将这些2000个元素存储在" myElements"中是否有意义?在数据库而不是代码本身?这仍然允许用户点击"基于定义的类结构的属性?有什么好处?
非常感谢任何建议/文献提示!