【发布时间】:2012-02-24 13:41:34
【问题描述】:
我需要进行一些更改,以便一次只从列表中检索一个对象,而不是像现在这样检索整个列表。
现在,我在 B 类中有一个私有列表,其中一个属性返回整个列表,基本上无论如何都将其公开,我想更改它。
a 类的外观(使用列表操作的 ui 类)是,我输入一些数据验证它并将其发送到 B 类,然后 B 类根据输入将其打包成一个对象列表。
然后A类需要循环这个列表并将它添加到一个列表视图中以显示它,目前看起来像这样:
ListViewItem lvi = new ListViewItem();
foreach ([Object] o in CLassB.getList())
{
lvi = new ListViewItem(o.property0);
lvi.SubItems.Add(o.property1);
lvi.SubItems.Add(o.property2);
lvi.SubItems.Add(o.property3);
}
}
Object 是我的抽象类,它控制如何添加不同类型的项目,getList() 是我在 B 类中返回整个列表的方法。
问题是这些属性是所有类共享的公共属性,但也有一些不是,例如您输入有关对象的特定文本的文本框等,其显示如下:
private void lvRegistered_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
{
if (Listview.SelectedItems.Count > 0)
{
foreach ([Object] ob in ClassB.getList())
{
if (Listview.SelectedItems[0].SubItems[0].Text == ob.id.ToString())
{
TextBox.Clear();
TextBox.Text = ob.property4;
}
}
}
}
现在这一切都很好,但现在我有一个返回的列表要操作,但我不想返回列表使其公开我想根据索引号返回列表的一个对象(是的功能将完全相同,我创建了一个返回私有列表计数的方法,因此我可以遍历它并返回所有)。这是为了在我不想返回所有内容时练习 OOP。
如何做到这一点?我能想到的只是创建一个新列表,将 int 作为输入并搜索我的私人列表并找到索引,然后将其添加到另一个列表并返回该列表,但我不知道这是好的做法还是最好的方法去做吧?好吧,我还没有研究如何将一个元素“复制”到下一个列表,但不妨检查一下是否有更好的方法来做事?
这种方式让我感觉自己“走了很长一段路”
【问题讨论】:
-
所以只公开
ClassB.GetItemByIndex(int index)而不是ClassB.getList(),或者你的问题是什么? -
您可以使用 list.AsReadOnly() 方法 (goo.gl/Ue1kA)。