21

forforeachループの主な違いは何ですか?

使用できるシナリオと使用できforないシナリオforeach、およびその逆。

簡単なプログラムで表示することはできますか?

どちらも私には同じように見えます。それらを区別することはできません。

4

19 に答える 19

24

forループは、「この操作をn回実行する」という構成です

foreachループは、「このIEnumerable内の各値/オブジェクトに対してこの操作を実行する」という構成です

于 2012-06-07T10:02:09.897 に答える
12

foreach反復するオブジェクトがインターフェースを実装している場合に使用できIEnumerableます。forインデックスでのみオブジェクトにアクセスできる場合に使用する必要があります。

于 2012-06-07T09:59:59.840 に答える
11

より一般的なアプローチでこれに答えようとします:

foreach指定されたセットまたはリスト ( を実装するものIEnumerable) の各要素を定義済みの方法で反復処理するために使用されます。コンテナーによって決定されるため、正確な順序に影響を与えることはできません (エントリをスキップするか、ループ全体をキャンセルする以外)。

foreach (String line in document) { // iterate through all elements of "document" as String objects
    Console.Write(line); // print the line
}

forは、ループに入る前にコードを実行し、反復ごとに 1 回実行するループを作成するもう 1 つの方法です。通常、コードを特定の回数ループするために使用されます。これとは逆にforeach、現在の位置に影響を与えることができます。

for (int i = 0, j = 0; i < 100 && j < 10; ++i) { // set i and j to 0, then loop as long as i is less than 100 or j is less than 10 and increase i after each iteration
    if (i % 8 == 0) { // skip all numbers that can be divided by 8 and count them in j
        ++j
        continue;
    }
    Console.Write(i);
}
Console.Write(j);

foreach可能で適用可能な場合は、常に not を使用しますfor(配列インデックスがあると仮定して)。内部データ編成によっては、インデックスforeachを使用するよりもはるかに高速になる場合forがあります (特に、リンクされたリストを使用する場合)。

于 2012-06-07T10:07:46.550 に答える
5

foreach に関しては、誰もが正しい答えをくれました。つまり、IEnumerable を実装する要素をループする方法です。

一方、 for は他の回答に示されているものよりもはるかに柔軟です。実際、 for は、指定された条件が真である限り、ステートメントのブロックを実行するために使用されます。

マイクロソフトのドキュメントから:

for (initialization; test; increment)
     statement

初期化が必要です。表現。この式は、ループが実行される前に一度だけ実行されます。

テスト 必須。ブール式。テストが真の場合、ステートメントが実行されます。テストが false の場合、ループは終了します。

増分 必須。表現。インクリメント式は、ループを通過するたびに最後に実行されます。

ステートメント オプション。test が true の場合に実行されるステートメント。複合ステートメントにすることができます。

これは、さまざまな方法で使用できることを意味します。古典的な学校の例は、1 から 10 までの数字の合計です。

int sum = 0;
for (int i = 0; i <= 10; i++)
    sum = sum + i;

ただし、配列内の数値を合計するためにも使用できます。

int[] anArr = new int[] { 1, 1, 2, 3, 5, 8, 13, 21 };
int sum = 0;
for (int i = 0; i < anArr.Length; i++)
    sum = sum + anArr[i];

(これは foreach で行うこともできます):

int[] anArr = new int[] { 1, 1, 2, 3, 5, 8, 13, 21 };
int sum = 0;
foreach (int anInt in anArr)
    sum = sum + anInt;

ただし、1 から 10 までの偶数の合計には使用できます。

int sum = 0;
for (int i = 0; i <= 10; i = i + 2)
    sum = sum + i;

そして、次のようなクレイジーなものを発明することさえできます。

int i = 65;
for (string s = string.Empty; s != "ABC"; s = s + Convert.ToChar(i++).ToString()) ;
    Console.WriteLine(s);
于 2012-06-07T10:32:10.200 に答える
4

foreachは以下とほぼ同等です:

var enumerator = list.GetEnumerator();
var element;
while(enumerator.MoveNext()){
  element = enumerator.Current;
}

また、「foreach」準拠のパターンを実装するには、 MoveNext()メソッド、Reset()メソッド、およびCurrentプロパティを持つオブジェクトを返すメソッドGetEnumerator()を持つクラスを提供する必要があります。

実際、IEnumerable も IEnumerator も実装する必要はありません。

いくつかの派生ポイント:

  • foreachコレクションの長さを知る必要がないため、「ストリーム」または一種の「要素プロデューサー」を反復処理できます。
  • foreachは (ほとんどの場合) イテレータで仮想メソッドを呼び出すため、 よりもパフォーマンスが低下する可能性がありますfor
于 2013-02-11T13:17:19.140 に答える
4

for ループ:

 1) need to specify the loop bounds( minimum or maximum).

  2) executes a statement or a block of statements repeatedly 
    until a specified expression evaluates to false.

例1:-

int K = 0;

for (int x = 1; x <= 9; x++){
        k = k + x ;
}

foreach ステートメント:

1)do not need to specify the loop bounds minimum or maximum.

2)repeats a group of embedded statements for 
     a)each element in an array 
  or b) an object collection.       

例2:-

int k = 0;

int[] tempArr = new int[] { 0, 2, 3, 8, 17 };

foreach (int i in tempArr){
    k = k + i ;
}
于 2012-06-07T10:19:11.113 に答える
3

それはあなたが何をしているのか、そしてあなたが何を必要としているのかによって異なります。

アイテムのコレクションを繰り返し処理していて、インデックス値を気にしない場合は、 foreach の方が便利で、書きやすく、安全です。アイテムの数を間違えることはありません。

たとえば、コレクション内のすべてのアイテムを処理する必要がある場合、またはそれらを逆の順序で処理する必要がある場合は、for ループが唯一の実用的な方法です。

最大の違いは、foreach ループがコレクション内の各要素のインスタンスを順番に処理するのに対し、for ループは任意のデータを処理でき、コレクション要素だけに限定されないことです。これは、for ループがコレクションを変更できることを意味します。これは違法であり、foreach ループでエラーが発生します。

詳細については、MSDN を参照してください: foreachおよびfor

于 2014-05-12T11:01:45.093 に答える
2

for ループは、ループを実行する回数を事前に指定または決定している場合に役立ちます。例として、曜日ごとにプロセスを実行する必要がある場合、7 つのループが必要であることがわかります。

foreach ループは、コレクションまたは配列のすべての部分に対してプロセスを繰り返したい場合ですが、特にループの実行回数は重要ではありません。例として、ユーザーのお気に入りの本のリストをフォーマットしています。すべてのユーザーが異なる数の本を持っているか、まったく持っていない可能性があります。実際に何冊あるかは気にしません。ループをそれらすべてに作用させたいだけです。

于 2012-06-08T19:12:01.007 に答える
2

foreach は、配列またはその他の IEnumerable データ コレクションがある場合に便利です。ただし、インデックスでアクセスできる配列の要素にアクセスするために使用できます。

于 2012-06-07T10:02:53.653 に答える
1

c# の for ループと foreach ループの主な違いは、その動作によって理解できます。

for ループ:

  1. for ループの変数は常に整数のみです。
  2. For ループは、指定された式が false と評価されるまで、ステートメントまたはステートメントのブロックを繰り返し実行します。
  3. for ループでは、ループの境界 (最大または最小) を指定する必要があります。-------->これが for ループの限界であると言えます。

foreach ループ:

  1. foreach ループの場合、ループの変数 while は、配列の下の値の型と同じになります。

  2. Foreach ステートメントは、配列またはオブジェクト コレクション内の各要素に対して一連の埋め込みステートメントを繰り返します。

  3. foreach ループでは、ループ境界の最小値または最大値を指定する必要はありません。---> これが for each ループの利点であると言えます。

于 2016-09-05T13:37:06.910 に答える
0

forとforeachの単純な違い

  for loop is working with values.it must have condition then increment and intialization also.you have to knowledge about 'how many times loop repeated'.

 foreach is working with objects and enumaretors. no need to knowledge how many times loop repeated.
于 2013-02-11T12:49:54.780 に答える
-1

foreach ステートメントは、配列内の各要素、または System.Collections.IEnumerable または System.Collections.Generic.IEnumerable インターフェイスを実装するオブジェクト コレクションの埋め込みステートメントのグループを繰り返します。foreach ステートメントは、コレクションを反復処理して必要な情報を取得するために使用されますが、予期しない副作用を避けるために、ソース コレクションからアイテムを追加または削除するために使用することはできません。ソース コレクションからアイテムを追加または削除する必要がある場合は、for ループを使用します。

于 2014-01-27T18:05:45.030 に答える