程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Effective C#原則11:選擇foreach循環(2)

Effective C#原則11:選擇foreach循環(2)

編輯:關於C語言

(譯注:注意數組與集合的區別。數組是一次性分配的連續內 存,集合是可以動態添加與修改的,一般用鏈表來實現。而對於C#裡所支持的鋸 齒數組,則是一種折衷的處理。)

foreach總能保證最好的代碼。你不用 操心哪種結構的循環有更高的效率:foreach和編譯器為你代勞了。

如果 你並不滿足於高效,例如還要有語言的交互。這個世界上有些人(是的,正是他 們在使用其它的編程語言)堅定不移的認為數組的索引是從1開始的,而不是0。 不管我們如何努力,我們也無法破除他們的這種習慣。.Net開發組已經嘗試過。 為此你不得不在C#這樣寫初始化代碼,那就是數組從某個非0數值開始的。

// Create a single dimension array.
// Its range is [ 1 .. 5 ]
Array test = Array.CreateInstance( typeof( int ),
new int[ ]{ 5 }, new int[ ]{ 1 });

這段代碼應該足夠讓所 有人感到畏懼了(譯注:對我而言,確實有一點)。但有些人就是很頑固,無認你 如何努力,他們會從1開始計數。很幸運,這是那些問題當中的一個,而你可以 讓編譯器來“欺騙”。用foreach來對test數組進行迭代:

foreach( int j in test )
 Console.WriteLine ( j );

foreach語句知道如何檢測數組的上下限,所以你應該這樣做 ,而且這和for循環的速度是一樣的,也不用管某人是采用那個做為下界。

對於多維數組,foreach給了你同樣的好處。假設你正在創建一個棋盤。 你將會這樣寫兩段代碼:

private Square[,] _theBoard = new Square[ 8, 8 ];
// elsewhere in code:
for ( int i = 0; i < _theBoard.GetLength( 0 ); i++ )
 for( int j = 0; j < _theBoard.GetLength( 1 ); j++ )
  _theBoard[ i, j ].PaintSquare( );

取而代之的是,你可以這樣簡單的畫這個棋 盤:

foreach( Square sq in _theBoard )
  sq.PaintSquare( );

(譯注:本人不贊成這樣的方法。它隱藏了 數組的行與列的邏輯關系。循環是以行優先的,如果你要的不是這個順序,那麼 這種循環並不好。)

foreach語句生成恰當的代碼來迭代數組裡所有維數 的數據。如果將來你要創建一個3D的棋盤,foreach循環還是一樣的工作,而另 一個循環則要做這樣的修改:

for ( int i = 0; i < _theBoard.GetLength( 0 ); i++ )
 for( int j = 0; j < _theBoard.GetLength( 1 ); j++ )
  for( int k = 0; k < _theBoard.GetLength( 2 ); k++ )
   _theBoard[ i, j, k ].PaintSquare( );

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved