2011-07-29 58 views
-3

我的代碼是:實現IEnumerable。錯誤。

using System; 
using System.Threading; 
using System.Collections; 
using System.Collections.Generic; 

namespace IEnumerable 
{ 
    public class MyEnumerable<T> : IEnumerable<T> 
    { 
     public MyEnumerable(T[] items) 
     { 
      this.items = items; 
     } 

     public IEnumerator<T> GetEnumerator() 
     { 
      return new NestedEnumerator(this); 
     } 

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

     // The enumerator definition. 
     class NestedEnumerator : IEnumerator<T> 
     { 
      public NestedEnumerator(MyEnumerable<T> coll) 
      { 
       Monitor.Enter(coll.items.SyncRoot); 
       this.index = -1; 
       this.coll = coll; 
      } 

      public T Current 
      { 
       get { return current; } 
      } 

      object IEnumerator.Current 
      { 
       get { return Current; } 
      } 

      public bool MoveNext() 
      { 
       if (++index >= coll.items.Length) 
       { 
        return false; 
       } 
       else 
       { 
        current = coll.items[index]; 
        return true; 
       } 
      } 

      public void Reset() 
      { 
       current = default(T); 
       index = 0; 
      } 

      public void Dispose() 
      { 
       try 
       { 
        current = default(T); 
        index = coll.items.Length; 
       } 
       finally 
       { 
        Monitor.Exit(coll.items.SyncRoot); 
       } 
      } 

      private MyEnumerable<T> coll; 
      private T current; 
      private int index; 
     } 

     private T[] items; 
    } 

    public class EntryPoint 
    { 
     static void Main() 
     { 
      MyEnumerable<int> integers = new MyEnumerable<int>(new int[] { 1, 2, 3, 4 }); 

      foreach (int n in integers) 
      { 
       Console.WriteLine(n); 
      } 
     } 
    } 
} 

我在執行這段代碼,但我得到一個錯誤。任何人都可以幫我解決這個錯誤嗎?請幫忙。 我的錯誤是:

1 - > 'IEnumerable的' 是 '命名空間',但使用像 '類型'

2 - > 'IEnumerable.MyEnumerable' 不實現接口成員「System.Collections中。 IEnumerable.GetEnumerator()」。 'IEnumerable.MyEnumerable.GetEnumerator()'無法實現'System.Collections.IEnumerable.GetEnumerator()',因爲它沒有匹配的返回類型'System.Collections.IEnumerator'。

+7

有意詳細說明您收到的錯誤嗎? (如果有人很好奇,下面是上述代碼的IDEone:http://www.ideone.com/RHu4V) –

+0

來吧,讓我們知道錯誤是什麼。我們來幫忙,不參加面試! –

+1

錯誤:'IEnumerable'是一個'命名空間',但用於'類型' –

回答

7

錯誤很可能是因爲您已經在系統中使用IEnumerable作爲您的名稱空間。

這意味着您對IEnumerable的引用是指當前命名空間,而不是您要使用的IEnumerableSystem.Collections.IEnumerable)。

嘗試將您的名稱空間更改爲其他名稱。

+0

+1不要在你的名字空間使用關鍵字 – Henry

3

聽聽編譯器告訴你,改變你的命名空間的東西明智的(如BlingBlingWoo

... 
using System.Collections.Generic; 

namespace BlingBlingWoo 
{ 
    public class MyEnumerable<T> : IEnumerable<T> 
    ... 

請告訴我這裏發生的是:

Error : 'IEnumerable' is a 'namespace' but is used like a 'type'

您正在嘗試使用鍵入IEnumerable,但是您創建了名爲IEnumerable的名稱空間,因此編譯器將其命名空間。