PDA

View Full Version : Hỏi nhược điểm của Cấu trúc foreach và for ?



daianevent
02-06-2014, 14:31
Các bạn cho mình hỏi về tất cả các nhược điểm của cấu trúc lặp Foreach và nhược điểm của cấu trúc lặp For
Mong các bạn giúp đỡ càng chi tiết càng tốt ! thanks

Scripted
03-06-2014, 07:54
Cái này có fải trả lời homework không ? Bạn có search google chưa ?


Foreach là đi từ trên xuống dưới object

còn for thì có thể đi index bất cứ ở đâu nhưng mà kô fải object là dạng index rồi muốn có object thì fai varibale[i] :)

Chỉ đơn giãn vậy thôi

bienca101
03-06-2014, 13:15
Đâ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:



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:



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.

tuongnvsq
03-06-2014, 23:20
cấu trúc cái nào dễ bẻ hơn vậy?

Scripted
04-06-2014, 10:02
Không hiểu câu hỏi cho lắm nhưng câu trả lời là cả 2 :)

anhvuphongson
12-09-2014, 15:19
Cơ bản là cái nào làm được thì cái kia cũng làm được, For Each thuận tiện hơn nhưng có 1 số For Each dùng sẽ sai - nếu nó có liên quan đến thêm và xóa những Object lúc bạn chạy For Each.