Compiler Error CS1579
foreach statement cannot operate on variables of type 'type1' because 'type2' does not contain a public definition for 'identifier'
To iterate through a collection using the foreach statement, the collection must meet the following requirements:
- Its type must include a public parameterless
GetEnumerator
method whose return type is either class, struct, or interface type. - The return type of the
GetEnumerator
method must contain a public property namedCurrent
and a public parameterless method namedMoveNext
whose return type is Boolean.
Example
The following sample generates CS1579 because the MyCollection
class doesn't contain the public GetEnumerator
method:
// CS1579.cs
using System;
public class MyCollection
{
int[] items;
public MyCollection()
{
items = new int[5] {12, 44, 33, 2, 50};
}
// Delete the following line to resolve.
MyEnumerator GetEnumerator()
// Uncomment the following line to resolve:
// public MyEnumerator GetEnumerator()
{
return new MyEnumerator(this);
}
// Declare the enumerator class:
public class MyEnumerator
{
int nIndex;
MyCollection collection;
public MyEnumerator(MyCollection coll)
{
collection = coll;
nIndex = -1;
}
public bool MoveNext()
{
nIndex++;
return (nIndex < collection.items.Length);
}
public int Current => collection.items[nIndex];
}
public static void Main()
{
MyCollection col = new MyCollection();
Console.WriteLine("Values in the collection are:");
foreach (int i in col) // CS1579
{
Console.WriteLine(i);
}
}
}
Collaborate with us on GitHub
The source for this content can be found on GitHub, where you can also create and review issues and pull requests. For more information, see our contributor guide.
Feedback
https://aka.ms/ContentUserFeedback.
Coming soon: Throughout 2024 we will be phasing out GitHub Issues as the feedback mechanism for content and replacing it with a new feedback system. For more information see:Submit and view feedback for