Ошибка компилятора 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".
![]() |
---|
В 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);
}
}
}