回答
您必須枚舉以獲得計數。像List這樣的其他結構保持運行計數。
如果將IEnumerable變量傳遞給該方法,則variable.Count()對我有用。 – 2015-07-13 15:46:11
@Vikram據我所知,這不可能是真的。你確定你不是在某個地方演出? – Sinjai 2017-07-20 15:16:33
無論如何,你必須循環遍歷它。 LINQ提供Count
方法:
var result = myenum.Count();
是的,這工作,只要你有「使用System.Linq;」在文件的開頭。沒有Linq,這是行不通的。 – user1961169 2013-11-21 02:16:12
不使用LINQ可能的,因爲調用.Count之間(...)不枚舉集合。如果遇到無法遍歷集合兩次的問題,請嘗試以下操作:
List<MyTableItem> myList = dataContext.MyTable.ToList();
int myTableCount = myList.Count;
foreach (MyTableItem in myList)
{
...
}
還有IList或ICollection,如果你想使用一個仍然有點靈活的構造,但也有你需要的功能。它們都暗示IEnumerable。
解決方案取決於您不想枚舉集合的原因。
如果這是因爲枚舉集合可能很慢,那麼沒有解決方案會更快。如果可能,您可能需要考慮使用ICollection。除非枚舉速度非常慢(例如從磁盤讀取項目),否則速度不應該成爲問題。
如果這是因爲枚舉集合需要更多的代碼,那麼它已經以.Count()擴展方法的形式爲您編寫。只需使用MyEnumerable.Count()。
如果這是因爲您希望能夠在計數後枚舉集合,那麼.Count()擴展方法允許這樣做。你甚至可以在你正在枚舉的集合上調用.Count(),它會繼續從count之前的位置繼續。例如:
foreach (int item in Series.Generate(5))
{
Console.WriteLine(item + "(" + myEnumerable.Count() + ")");
}
會給結果
0(5)
1(5)
2(5)
3(5)
4(5)
如果是因爲枚舉有副作用(例如,寫入磁盤/控制檯)或依賴於可能在計數和枚舉之間改變的變量(例如,從磁盤讀取)[N.B.如果可能的話,我會建議重新考慮這個架構,因爲這可能會導致很多問題],那麼需要考慮的一種可能性是將枚舉讀取爲間歇存儲。例如:
List<int> seriesAsList = Series.Generate(5).ToList();
以上所有假設您不能更改類型(即從不擁有的庫中返回)。如果可能的話,您可能需要考慮更改爲使用ICollection或IList(ICollection的範圍比IList的範圍更廣),它具有Count屬性。
如果你需要計數,然後循環,你可能會更好的列表。
如果您使用的計數來檢查成員可以使用Any()
避免枚舉整個集合。
- 作爲最好的解決辦法,我認爲是要做到以下幾點:使用System.Linq.Dynamic
- ;
- myEnumerable.AsQueryable()。COUNT()
錯誤。這不比別的更好,可能更糟。 – SLaks 2011-01-06 22:24:14
這也取決於你想通過計算達到的目標。如果你有興趣,查明枚舉集合有任何元素,你可以使用
myEnumerable.Any()over myEnumerable.Count()其中前者將產生第一個元素,後者將產生所有元素。
使用此。
IEnumerable list =..........;
list.OfType<T>().Count()
它將返回計數。
一個IEnumerable將不得不通過每個項目進行迭代。得到全數。 如果您只需檢查IEnumerable中是否有一個或多個項目,則更有效的方法是檢查是否有任何項目。 Any()只檢查是否有值,並且不會遍歷所有內容。
IEnumerable的myStrings =新列表(){ 「一」, 「二」, 「三」};
布爾hasValues = myStrings.Any();
- 1. 無法從AD獲得TGT
- 2. 使用IDataReader作爲IEnumerable的最佳方法<T>?
- 3. 將IEnumerable <char>轉換爲字符串的最佳方法?
- 4. 如何獲得IEnumerable <DirectoryInfo>的Count()方法?
- 5. 獲得從IEnumerable <IEnumerable的<T>>
- 6. 什麼是獲得TimeSpan的倍數的最佳方法
- 7. 哪個是獲得實時數據的最佳方法?
- 8. 什麼是在JavaScript中獲得隨機數的最佳方法
- 9. 將IEnumerable <T>轉換爲Datatable for SQL批量複製的最佳方法
- 10. 從IEnumerable <SelectListItem>中刪除項目的最佳方法是什麼?
- 11. 獲得最接近元素的最佳方法
- 12. 獲得ipv4最後八位字節的最佳方法
- 13. 獲得靜態列表<T>的最佳方法是什麼?
- 14. 從街道方向獲得準確座標的最佳方法
- 15. 如何獲得IEnumerable <T> .ToObservableCollection()?
- 16. 需要從IEnumerable獲得ID <item>
- 17. 獲取Matlab的最佳方法<-> C++接口
- 18. 獲得__libc_stack_end的64位值的最佳方法是什麼?
- 19. 在struts2中獲得會話的最佳和推薦的方法?
- 20. 使用服務負責人獲得TGT
- 21. IEnumerable的擴展方法<Enum>?
- 22. 返回IEnumerable的<dynamic>從方法
- 23. 從System.Collections.IEnumerable獲取泛型IEnumerable <T>的最簡單方法是什麼?
- 24. 在.Net Core 2.0上獲得網絡成本的最佳方法
- 25. 獲得枚舉標誌所有位的最佳方法?
- 26. 獲得一系列結果的最佳方法是什麼?
- 27. 從稀疏矩陣獲得向量的最佳方法
- 28. 從變換中獲得形狀的最佳方法
- 29. 使用oracle和petapoco獲得一行存在的最佳方法
- 30. 獲得粗略用戶移動速度的最佳方法
可能的重複[Howto:從IEnumerable計數項目沒有迭代?](http://stackoverflow.com/questions/168901/howto-count-the-items-from-a-ienumerablet-without-iterating ) –
2012-02-18 15:22:06