foreach循環是否僅使用接口IEnumerator
和IEnumerable
來迭代自定義類型(類)的對象,或者也用於迭代內置類型(幕後)?foreach是否爲內置類型使用IEnumerator/IEnumerable?
回答
Foreach不依賴於IEnumerable
。但是,如果一個類型實現它,那麼foreach循環將能夠枚舉它(基於模式的匹配)。
在幕後它只需要一個GetEnumerator()
方法和枚舉器必須包含Current
和MoveNext()
。
從MSDN:
集合類型:
- 必須是類型之一:接口,類,或結構。
- 必須包含一個名爲的GetEnumerator的實例方法,該方法返回一個類型,例如
Enumerator
(將在下面解釋)。類型
Enumerator
(一類或結構)必須包含:
- 命名電流返回
ItemType
或可轉化爲它類型的屬性。屬性訪問器返回集合的當前元素。- 一個布爾方法,命名爲MoveNext的,即增加項目計數器,並返回真如果有集合中的多個項目。
從MSDN - Using foreach with Collections
修訂:此更新,請參見MSDN頁面 - How to: Access a Collection Class with foreach (C# Programming Guide)。
更新的MSDN文檔頁面(VS 2012代替VS.NET 2003):[如何:使用foreach訪問Collection類(C#編程指南)](http ://msdn.microsoft.com/en-us/library/9yb8xew9.aspx) –
foreach對本地和自定義類型都使用IEnumerable。例如,如果查看System.Array,它是所有數組類型的基礎,它實現了IEnumerable。
for-each是語言構造,並沒有真正區分定製/內置類型。
對於每個不依賴於IEnumerable
,它使用基於模式的匹配。請參閱http://blogs.msdn.com/b/ericlippert/archive/2011/06/30/following-the-pattern.aspx
定義枚舉數,不包含IEnumerable聲明。
public class WorkInfoEnumerator
{
List<WorkItem > wilist= null;
int currentIndex = -1;
public MyClassEnumerator(List<WorkItem > list)
{
wilist= list;
}
public WorkItem Current
{
get
{
return wilist[currentIndex];
}
}
public bool MoveNext()
{
++currentIndex;
if (currentIndex < wilist.Count)
return true;
return false;
}
}
public class WorkInfo
{
List<WorkItem > mydata = new List<WorkItem >();
public WorkInfoEnumerator GetEnumerator()
{
return new WorkInfoEnumerator(mydata);
}
}
某處在碼可以使用:
WorkInfo wi = new WorkInfo();
foreach(WorkItem witem in wi)
{
}
- 1. 使用forEach爲內部類的JSP
- 2. 如何檢查外部類型是否是內部類型?
- 3. 使用send_file設置內容類型
- 4. 內置類型,何時(不)使用?
- 5. 「基本數據類型」和「內置數據類型」的含義是否相同?
- 6. 不能使用匿名類型的foreach
- 7. 使用FileEntity時是否有一般文件內容類型
- 8. 我是否需要使用MultipleIterator的foreach?
- 9. 如何使用Rack爲特定文件設置內容類型?
- 10. .Net中是否有內置的URL類?
- 11. 是否有理由在Scala中使用子類型作爲類型參數?
- 12. WSGI - 將內容類型設置爲JSON
- 13. 是否有可能使用豬內置函數內置java udf
- 14. ASP.NET,確定請求內容類型是否爲JSON
- 15. 如何檢查ajax響應是否爲javascript內容類型?
- 16. GHC-mod是否必須爲類型使用全名?
- 17. 返回類型爲void的方法是否使用return語句?
- 18. Flow中的子類型內置類型
- 19. 將Activity設置爲視圖模型類是否合適?
- 20. 是否可以將具有泛型類型的模型配置爲屬性?
- 21. 內部配置錯誤,如果內容類型是不是JSON
- 22. 是否可以爲HashSet設置泛型?
- 23. Golang檢查接口類型是否爲
- 24. 如何確定類型是否爲RunTimeType?
- 25. 是否爲null類型的上下文?
- 26. 將foreach轉換爲變量類型的思想是什麼?
- 27. 將字符類型轉換爲整數類型是否安全
- 28. 甲骨文內置類型
- 29. python內置函數類型()
- 30. 如何在使用泛型的基類上使用foreach?
的foreach文檔:[MSDN - 的foreach,在(C#參考)](http://msdn.microsoft.com/en-us /library/ttw7t8t6%28v=vs.110%29.aspx) –