簡體   English   中英

C#IEnumerable等效於Java Iterator的next()方法?

[英]C# IEnumerable equivalent of next() method of java Iterator?

我在這里發現了一種在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;
}

您可以使用GetEnumerator方法獲取對Enumerator的引用,然后可以使用MoveNext方法繼續進行操作,並使用Current屬性訪問元素:

var enumerator = getInt().GetEnumerator();
while(enumerator.MoveNext())
{
    int n = enumerator.Current;
    Console.WriteLine(n);
}

好的,伙計,它暗示着您的搜索方法想要實現的目標是在整個迭代器中運行,直到找到匹配項為止。 然后它將從此匹配開始返回迭代器。 這是實現我剛剛描述的方法的替代方法:

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;
        }
    }
}

C#具有foreach -loop來訪問IEnumerable 可以使用foreach來訪問具有GetEnumerator方法的每個對象。

我認為您不應該嘗試直接將Java轉換為C#,因為基礎概念存在一些差異。 在Java中有Iterator的地方,在C#中有IEnumerable -implementations。 然后通過使用foreach進行迭代。

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())
    foreach(T el in current)
    {
        // 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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM