2011-07-13 4 views
3

可能性の重複foreachのために:
For vs Foreach loop in C#C#の:詩は

は、別のより良い方ですか?

forループのオーバーヘッドがforeachよりも小さいと聞いたことがありますが、これについてはまだわかりません。

+0

あなたはすでに答えています:http://stackoverflow.com/questions/365615/in-net-which-loop-runs-faster-for-or-foreachを –

+1

単一の変数をループの繰り返し処理のためにAを。 foreachループでは、イテレータオブジェクトの作成、イテレータ上の(おそらく仮想の)メソッドの呼び出しが必要であり、イテレータの処分が必要です。これはあなたのために肯定的な証拠ではないかもしれません(なぜそれが答えではないのか)。しかし、これを知っているとあなたは*証明が必要ではないかもしれません。 –

+0

参考:とにかく、最初のページではなく、私が検索したときに重複は上がらなかった。 – jp2code

答えて

2

あなたのアプリケーションによっては、他のものより「良い」ものがあることが異なります。あなたはちょうどデータ構造を読んでいますか?あなたはデータ構造に書いていますか?あなたはどんな種類のデータ構造も使用せず、数学をやっていますか?

それぞれ独自の用途があります。 for eachループは、通常、データ構造(配列、リンクされたリストなど)から物を読み取るために使用されます。例えば。

foreach(myClass i in myList) 
{ 
    int x = i.getX(); 
    console.writeline(x); 
} 

ここで、forループを使用して、データ構造のエントリを更新するなどのことができます。

for (int i = 0; i < myList.count(); i++) 
{ 
    myList[i].x += i * 80; 
} 
+0

あなたの最初のループはどの言語ですか?それはC#ではないからです。 –

+0

たわごと、私の悪い。最近VBで作業をしていたので、最近は2つを混ぜてしまいました。一定。 – MGZero

2

foreachインデックスを必要としない場合は(ほとんどのアプリケーションではほとんどの場合)、forを使用します。より最適化されているため、アレイ全体のforeachは、実際のためにILに翻訳されている間

+1

私は基本的なトランザクションサポートが必要なときに 'foreach'を使います。コレクションが列挙中に変更された場合、 'foreach'は例外をスローします - ' for'は返されません – STW

2

今日のコンパイラは、.NET 1.

のコンパイラよりもずっとよくなっています。 汎用コレクションのForeachは、汎用のienumeratorを返す点で最適化されており、linqにはその周辺のいくつかのneato最適化もあります。

したがって、答えは「はい」ですが、現実の答えは「いいえ」です。

関連する問題