[英]Do I need IEnumerator to run a generic list through a foreach loop if so how is it implemented
如何通過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);
}
因此,通常只使用List,這意味着您的代碼應該是:
static void Main(string[] args)
{
var list1 = new List<int>();
list1.Add(1);
list1.Add(2);
list1.Add(3);
list1.Add(4);
list1.Add(5);
foreach(int i in list1)
{
Console.WriteLine(i);
}
但是,我猜您在問的是在您自己的類型上使用foreach所需的內容。
答案是一些鴨子輸入的編譯器魔術。 如果您的迭代類實現了一個名為GetEnumerator()的方法,該方法返回符合某些規則的類型(不帶參數的MoveNext方法不帶參數,但返回一個bool和Current屬性,那么您可以繼續使用,請參見以下最無用的迭代器:
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
{
}
參見https://blogs.msdn.microsoft.com/kcwalina/2007/07/18/duck-notation/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.