2015-06-26 65 views
-3

我有一個實現了索引器的類。 我希望能夠在這個上運行一個foreach循環,但它說我必須實現枚舉器接口。這使我實現兩個方法:在'this'上實現'foreach'的GetEnumerator C#

#region IEnumerable implementation 

    public IEnumerator<Type> GetEnumerator() { 
     throw new NotImplementedException(); 
    } 

    #endregion 

    #region IEnumerable implementation 

    IEnumerator IEnumerable.GetEnumerator() { 
     throw new NotImplementedException(); 
    } 

    #endregion 
  1. 你能請我例子就是這兩者之間的區別?
  2. 它需要什麼樣的實現?

類是建立這樣:

  1. 它有一個字段是一個數組來保存數據。
  2. 它有一個索引器來獲取和設置上述數組中的特定元素。

我希望能夠運行在類內的 foreach循環,這樣我就可以獲取和使用索引的get和set邏輯設置陣列領域。

這就是爲什麼我需要實現GetEnumerator方法,但我不知道需要什麼樣的實現。

謝謝你的幫助。

注意: How do I implement IEnumerable<T>線程沒有幫助我,我讀過它。唯一的實現是返回數組的枚舉器。

+0

爲什麼你不只是迭代內部數組,而不是'this'? – Servy

+0

因爲它背後有一些邏輯。我只能在特定情況下返回內部數組單元格的值。通常我應該返回一個保存在另一個字段中的值。 – johni

+0

可能的重複[我如何實現IEnumerable ](http://stackoverflow.com/questions/11296810/how-do-i-implement-ienumerablet) –

回答

2

下面是實現IEnumerable的一個非常簡單的例子:

public class SomeEnumerable : IEnumerable<string> 
{ 
    private string[] values = new string[] { "foo", "bar" }; 

    #region Enumerator 

    private IEnumerable<string> GetValues() 
    { 
     foreach(var s in values) 
     { 
      yield return s; 
     } 
    } 

    #endregion Enumerator 

    #region IEnumerable implementation 

    public IEnumerator<string> GetEnumerator() { 
     return GetValues().GetEnumerator(); 
    } 

    #endregion 

    #region IEnumerable implementation 

    IEnumerator IEnumerable.GetEnumerator() { 
     return GetEnumerator(); 
    } 

    #endregion 
} 

只需更換邏輯的GetValues的()內,不管你需要,如果你正在做一些不尋常的。

+0

'GetValues'方法是不必要的。它的主體可以直接放在'GetEnumerator'方法中,因爲C#允許'yield return'出現在返回'IEnumerator'的方法中(以及返回'IEnumerable'的方法)。 – Kyle