Поделиться через


Ошибка компилятора CS0202

Обновлен: Ноябрь 2007

Сообщение об ошибке

Оператор foreach требует, чтобы возвращаемый тип "тип" в "type.GetEnumerator()" имел соответствующий открытый метод MoveNext и открытое свойство Current
foreach requires that the return type 'type' of 'type.GetEnumerator()' must have a suitable public MoveNext method and public Current property

Функция GetEnumerator, используемая для включения поддержки операторов "foreach", не может возвращать указатель или массив; она должна возвращать экземпляр класса, который может функционировать как перечислитель. Чтобы функция могла использоваться как перечислитель, она должна включать открытое свойство "Current" и открытый метод "MoveNext".

ty55f89b.alert_note(ru-ru,VS.90).gifПримечание.

В C# 2.0 компилятор автоматически создает свойство "Current" и метод "MoveNext". Дополнительные сведения см. в примере кода в описании класса Универсальные интерфейсы. (Руководство по программированию на C#).

Следующий пример приводит к возникновению ошибки CS0202:

// CS0202.cs

public class C1
{
   public int Current
   {
      get
      {
         return 0;
      }
   }

   public bool MoveNext ()
   {
      return false;
   }

   public static implicit operator C1 (int c1)
   {
      return 0;
   }
}

public class C2
{
   public int Current
   {
      get
      {
         return 0;
      }
   }

   public bool MoveNext ()
   {
      return false;
   }

   public C1[] GetEnumerator ()
   // try the following line instead
   // public C1 GetEnumerator ()
   {
      return null;
   }
}

public class MainClass
{
   public static void Main ()
   {
      C2 c2 = new C2();

      foreach (C1 x in c2)   // CS0202
      {
         System.Console.WriteLine(x.Current);
      }
   }
}