在列表中显示项目的位置

我正在使用链接列表。 我的构造函数接受带有项目的数组,或者通过BtnAddTree单击将项目(一次一个)附加到列表中。 出于实验原因,我试图找出一种从列表中检索项目位置的方法。 我设置了三个按钮,希望显示: firstnextlast项目,并通过label显示。 我创建了两个函数来实现我的需求RetrieveCurrent_Tree()但是这里我走到了死胡同。 我知道显示next我可能需要使用循环的项目,但不确定如何去做。 如何显示列表中找到的项目的位置?

  public class ListForTrees { //Retrieve Position of item public void Retrieve(int Position) { int new_position = Position; fruit_trees current = first_tree; for (int i = 0; i < Position && current != null; i++) { current = current.next_tree; } return current; } //Show Current Tree public void Current_Tree() { try { current = fruit_trees.first_tree; labelSpecificTree.Text = current.Type.ToString(); } catch { }; } } ListForTrees mainlist = new ListForTrees(); private void BtnGo_Click(object sender, EventArgs e) { fruit_trees[] ax = { 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(ax); fruit_trees current = mainlist.first_tree; while (current != null) { TxtOutput.AppendText(current.ToString() + Environment.NewLine); current = current.next_tree; } } private void ShowNextItem_Click(object sender, EventArgs e) { //Show Next Item } private void ShowLastItem_Click(object sender, EventArgs e) { //Show Last Item } private void ShowFirstItem_Click_1(object sender, EventArgs e) { // Show First Item } } } 

开发一种正确比较对象的方法。 是树型独特吗? 也许你需要一个完整的icomparable?

然后在listoftrees类中创建一个方法

 public int getPosition(fruit_trees tree) { fruit_trees ft = first_tree; if(ft.tree_type == tree.tree_type) { return 0; //or return 1 depending on how you want to index stuff } int i = 1;//possibly set to 2 if returning 1 above while(ft.next_tree != null) { ft = ft.next_tree; if(ft.tree_type == tree.tree_type) { return i; } i++; } return -1; //or something else here to show that its not in the list } 

另请注意..不要在方法Current_Tree()中设置类中的标签值。 那应该返回一个fruit_trees对象,btn click方法应该设置标签值。

你应该完全摆脱这种方法(除非在上面的代码之外有一些原因。)