确定列表中当前指向的项目

我正在使用列表。 我已经能够确定列表中项目的第一个和最后一个位置。 我正在使用getPostion并通过Label显示项目名称。 我的表单中有三个按钮: ShowFirstItem ShowNextItem (不工作)和ShowLastItem显示标签中的相应项目。 我的下一个项目有问题。 我没有一个持有当前fruit_tree的成员。 所以我不知道如何添加一个int成员或另一个名为current fruit_tree成员。 我怎样才能找到下一个(第一个项目后)并显示结果?

  public class ListForTrees { public fruit_trees GetNextTree() { current = 0; fruit_trees ft = first_tree; int i = 0; while (i != current) { ft = ft.next_tree; i++; } return ft; } } ListForTrees mainlist = new ListForTrees(); private void BtnGo_Click(object sender, EventArgs e) { fruit_trees[] ar_items = { new fruit_trees("cherry", 48, 12.95, 3), new fruit_trees("pine", 36, 9.95, 8), new fruit_trees("oak", 60, 14.95, 2), new fruit_trees("peach", 54, 19.95, 3), new fruit_trees("pear", 36, 11.85, 2), new fruit_trees("apple", 62, 13.45, 5) }; mainlist = new ListForTrees(ar_items); fruit_trees current = mainlist.first_tree; while (current != null) { TxtOutput.AppendText(current.ToString() + Environment.NewLine); current = current.next_tree; } } private void ShowFirstItem_Click_1(object sender, EventArgs e) { // Show First Item labelSpecificTree.Text = mainlist.first_tree.GetTreeType; } private void ShowLastItem_Click(object sender, EventArgs e) { //Show Last Item labelSpecificTree.Text = mainlist.last_tree.GetTreeType; } private void ShowNextItem_Click(object sender, EventArgs e) { //Show Next Item fruit_trees obj = mainlist.GetNextTree(); if (obj == null) { labelSpecificTree.Text = "No more trees!"; } else { mainlist.current++; labelSpecificTree.Text = obj.next_tree.GetTreeType.ToString(); } } } 

我想补充一下

 public int current; 

到列表中。 在构造函数中将其设置为0;

然后创建一个返回当前fruit_trees对象的方法

 public fruit_trees getCurrent() { fruit_trees ft = first_tree; int i = 0; while(i != current) { ft = ft.next_tree; i++; } return ft; } 

现在这个方法返回当前而不是下一个对象。 因此,您在下一个按钮事件中有2个选项。
这里的问题是你想在每次点击按钮时移动到下一个树对象吗? 如果这样增加当前属性,然后调用getcurrent来显示。 如果你想要保留电流而不是移动(即反复点击将导致相同的事情),则显示getcurrent()。next_tree.tree_type,不增加当前值。

我不确定这是否解决了您的问题,但您可以添加

 public fruit_trees current_tree; 

ListForTrees类中的字段。

然后,您可以轻松地将显示下一个和移动项目指针的方法添加到列表中的下一个项目。 记住当前项目可以避免每次希望列表中的下一个树时浏览整个列表。 代码可能如下所示:

 public fruit_trees GetNextTree() { //save currently pointed tree fruit_trees tree = this.current_tree; if (tree != null) { //move current_tree to the next tree, to be returned next time current_tree = current_tree.next_tree; //return saved tree object } return tree; } 

为了使其工作,您还应该记住使用添加到列表中的第一个树来启动current_tree的值。 您还可以编写某种ResetNextTreePointer()方法,将其指向列表中的第一个树。

对代码的一些建议:

  • 我想在类中使用字段属性会更好,所以即更改

     public fruit_trees first_tree; 

     private fruit_trees first_tree; public fruit_trees First_tree { get { return first_tree; } 

    因为它会禁用类外的任何类来显式修改这些字段。

  • 这段代码:

     if (count == 0) { ... } else if (count != 0) { ... } 

    可以改成:

     if (count == 0) { ... } else { ... }