首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Effective C# 原則 11:優先使用 foreach 迴圈(下)

     編輯:關於C語言

foreach 自動處理非零起始陣列


// 建立索引 1~5 的陣列
var arr = Array.CreateInstance(typeof(int), new[] { 5 }, new[] { 1 });
// arr.GetLowerBound(0) == 1, GetUpperBound(0) == 5

foreach (int i in arr) // 編譯器自動處理下界
    Console.WriteLine(i);

手寫 for 迴圈需自行呼叫 GetLowerBound/GetUpperBound,易出錯。

多維陣列同樣受惠

// 二維棋盤
Square[,] board = new Square[8, 8];

// 手寫巢狀迴圈
for (int i = 0; i < board.GetLength(0); i++)
    for (int j = 0; j < board.GetLength(1); j++)
        board[i, j].Paint();

// foreach 一行搞定,未來改 3D 只需改陣列宣告
foreach (Square sq in board)
    sq.Paint();

注意:foreach 以列優先順序遍歷,若需行優先請用巢狀 for。

效能:foreach ≧ for

  • 陣列:編譯器產生相同 IL(for 迴圈配合邊界檢查消除)
  • 集合:編譯器產生最佳化迭代器程式碼
  • JIT 針對 foreach 模式有專門最佳化

總結

除非需要索引值或反向遍歷,否則永遠優先使用 foreach。它更安全、更簡潔、效能不遜於手寫迴圈,且自動適應陣列維度與下界變化。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved