我发现(here)是在c#中模仿Java的Iterator方法的Iterator的一种实现,但是我不太确定如何在我的情况下使用它,或者不确定是否有更简单的方法重写c#的方法。
原始的Java方法:

public RWIterator<T> search (T e){

    RWIterator<T> it =null;
    RWIterator<T> current = iterator();
    RWIterator<T> prev = iterator();
    boolean found=false;
    while(! found && current.hasNext()){
        T el=current.next();
        if (el.equals(e)) found = true;
        else prev.next();
    }
    if (found) {
        //Iterator<T> tmp = prev;
        //System.out.println("searched value is="+tmp.next());
        it = prev;
    }
    return it;
}


RWIterator扩展Java Iterator的地方,我不明白prev的用法。

public RWIterator<T> Search(T e)
{

    RWIterator<T> it = null;
    RWIterator<T> current = Iterator();
    RWIterator<T> prev = Iterator();
    bool found = false;
    while (!found && current.GetEnumerator().MoveNext())
    {
        T el = current.GetEnumerator().Current;
        if (el.Equals(e)) found = true;
        else
        {
           //what should happen with prev.GetEnumerator().Current ?
        }
    }
    if (found)
    {
        //Iterator<T> tmp = prev;
        //System.out.println("searched value is="+tmp.next());
        it = prev;
    }
    return it;
}

最佳答案

好的,伙计,它暗示了您的搜索方法想要实现的目标是在整个迭代器中运行,直到找到匹配项为止。然后它将从此匹配开始返回迭代器。这是实现我刚刚描述的方法的替代方法:

public RWIterator<T> Search(T e)
{
    RWIterator<T> myIterator = Iterator();
    bool found = false;
    foreach (T element in myIterator)
    {
        if (found)
            yield return element;
        else if (element.Equals(e))
        {
            found = true;
            yield return element;
        }
    }
}

07-26 08:48
查看更多