Đây là cách trả lời nhanh nhất:
http://lmgtfy.com/?q=foreach+vs+for+c%23
Còn nếu bạn muốn đi sâu, đi xa, xa ơi là xa (cho vui) thì:
1/ Foreach tiện hơn for và nhìn hao hao giống mấy cái for, each, map function của mấy languages khác cũng có gốc rễ C
2/ Foreach về lý thuyết là dựa trên IEnumrable cho nên sẽ chậm hơn và tốn kém (cpu cycle, memory space) hơn for. Tuy nhiên do foreach được M$ khuyên dùng nên .net compiler sẽ optimize foreach khiến cho foreach và for gần như tương tự nhau. Điểm khác biệt nếu có chỉ ở những trường hợp nhỏ lẻ.
3/ Foreach cực kỳ tiện trong trường hợp collection không có indexer. (Như linked list, remote list, concurrent stream, object stream, vv...). Không phải cấu trúc nào cũng có count và có indexer, do đó không phải lúc nào cũng dùng for cũng tiện được.
Về sở thích cá nhân:
a/ Khi nào cần performance, dùng for với dạng sau:
Code:
int length = myList.Count;
for (int i = 0; i < length; i++)
{
}
Để ý là count được đặt ra ngoài vòng lặp. Điều này giúp cho tăng performance khi list thay đổi, khi multi-threading và giúp cho CPU dự đoán tốt hơn. (Cái này sẽ thể hiện trên cpu dòng xeon hay cpu cho server)
b/ Khi nào list nhỏ ( 1000 items ), và không cần quan tâm performance gì cả, đoạn code này là tiện nhất và đỡ phải gõ nhiều:
Code:
foreach (var item in myList)
{
}
Để ý là dùng var để đỡ mất công khai báo kiểu. Khi nào refactor inner type của myList thì cũng khỏi phải sửa code.
Bookmarks