如何通过foreach循环遍历此列表,但出现一条错误消息,说其中不包含GetEnumerator的公共实例定义
public class GenericList<T>
{
public void Add(T use) { }
}
static void Main(string[] args)
{
GenericList<int> list1 = new GenericList<int>();
list1.Add(1);
list1.Add(2);
list1.Add(3);
list1.Add(4);
list1.Add(5);
foreach(int i in list1)
{
Console.WriteLine(i);
}
答案 0 :(得分:0)
因此通常只使用List,这意味着您的代码应为:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
var x= new MyIterable();
foreach (var item in x)
{
Console.WriteLine(item);
}
}
}
public class MyIterable
{
public Item Current { get; set; }
public bool MoveNext()
{
return false;
}
public MyIterable GetEnumerator()
{
return this;
}
}
public class Item
{
}
但是,我想您要问的是在您自己的类型上使用foreach所需的条件。
答案是一些鸭子输入的编译器魔术。如果您的迭代类实现了一个名为GetEnumerator()的方法,该方法返回符合某些规则的类型(不带参数的MoveNext方法不带参数,但返回一个bool和Current属性,那么您可以使用,请参见下面最没用的迭代器:
{{1}}
请参见https://blogs.msdn.microsoft.com/kcwalina/2007/07/18/duck-notation/