这可能是一个简单的任务,但是我无法解决。
因此,当前我已经建立了一个包含文本框和按钮的表单,我希望能够单击该按钮,LinkedList中的第一个值将显示在文本框中。如果我再次单击该按钮,则将显示下一个值等。
我目前正在执行此操作,以便显示第一个值,但随后我无法继续执行下一个值。
这是我当前拥有的代码:
public class Node
{
public string data;
public Node next;
public Node(string newData)
{
data = newData;
next = null;
}
public void AddEnd(string data)
{
if (next == null)
{
next = new Node(data);
}
else
{
next.AddEnd(data);
}
}
}
public class myList
{
public void AddEnd(string data)
{
if (headnode == null)
{
headnode = new Node(data);
}
else
{
headnode.AddEnd(data);
}
}
public string getFirst() // this gets the first value within the list and returns it
{
if (headnode == null)
{
throw new Exception("List is empty");
}
Node node = headnode;
while (node.next != null)
{
node = node.next;
}
return node.data;
}
我也尝试过使用它:
public class NavigationList<T> : List<T>
{
private int _currentIndex = -1;
public int CurrentIndex
{
get
{
if (_currentIndex == Count)
_currentIndex = 0;
else if (_currentIndex > Count - 1)
_currentIndex = Count - 1;
else if (_currentIndex < 0)
_currentIndex = 0;
return _currentIndex;
}
set { _currentIndex = value; }
}
public T MoveNext
{
get { _currentIndex++; return this[CurrentIndex]; }
}
public T Current
{
get { return this[CurrentIndex]; }
}
}
但是,我对这样的东西不是很熟悉,所以我不确定如何使用它。
答案 0 :(得分:0)
因此,您有一系列的项目,而您唯一想要的就是获取第一个项目,一旦获得一个项目,每次要它时,您都想要下一个项目,直到出现为止没有其他物品了。
在.NET
中,这称为IEnumerable
,或者如果您知道序列中有哪些项目,例如MyClass
的项目,则称为{{1} }。根据您的情况,您需要一个IEnumerable<MyClass>
。
幸运的是,IEnumerable<string>
装载了实现.NET
的类。最常用的两个是数组和列表。您很少需要自己创建一个可枚举的类,重新使用现有的类并对其进行枚举。
IEnumerable
这看起来像很多代码,但是如果删除注释,实际上只有几行代码:
List<string> myData = ... // fill this list somehow.
IEnumerator<string> myEnumerator = null // we are not enumerating yet.
string GetNextItemToDisplay()
{ // returns null if there are no more items to display
// if we haven't started yet, get the enumerator:
if (this.myEnumerator == null) this.myEnumerator = this.myData.GetEnumerator();
// get the next element (or if we haven't fetched anything yet: get the first element
// for this we use MoveNext. This returns false if there is no next element
while (this.myEnumerator.MoveNext())
{
// There is a next string. It is in Current:
string nextString = enumerator.Current();
return nextString;
}
// if here: no strings left. return null:
return null;
}
您的ButtonClick事件处理程序:
string GetNextItemToDisplay()
{
if (this.myEnumerator == null) this.myEnumerator = this.myData.GetEnumerator();
while (this.myEnumerator.MoveNext())
return enumerator.Current();
return null;
}
如果您想从第一个元素重新开始,例如在更改列表之后
void OnButtonClick(object sender, eventArgs e)
{
string nextItemToDisplay = this.GetNextItemToDisplay();
if (nextItemToDisplay != null)
this.Display(nextItemToDisplay);
else
this.DisplayNoMoreItems():
}