サーチ…


ループスタイル

最も単純なループタイプ。ループ内のどこにいるのかを知るための本質的な手がかりがないという欠点しかありません。

/// loop while the condition satisfies
while(condition)
{
    /// do something
}

行う

whileと似てwhileが、条件は開始時ではなくループの最後で評価されます。この結果、少なくとも1回はループを実行します。

do
{
    /// do something
} while(condition) /// loop while the condition satisfies

にとって

別の些細なループスタイル。インデックス( i )をループすると増加し、それを使用することができます。通常、配列の処理に使用されます。

for ( int i = 0; i < array.Count; i++ )
{
    var currentItem = array[i];
    /// do something with "currentItem"
}

フォアハ

IEnumarableオブジェクトをループする近代化された方法。アイテムのインデックスやリストのアイテム数について考える必要はありません。

foreach ( var item in someList )
{
    /// do something with "item"
}

Foreachメソッド

他のスタイルはコレクションの要素を選択または更新するために使用されますが、このスタイルは通常、コレクション内のすべての要素をすぐに呼び出すメソッドに使用されます。

list.ForEach(item => item.DoSomething());

// or
list.ForEach(item => DoSomething(item));

// or using a method group
list.ForEach(Console.WriteLine);

// using an array
Array.ForEach(myArray, Console.WriteLine);

このメソッドはList<T>インスタンスでしか使用できず、 Array静的メソッドとしても使用できることに注意してください。これはLinqの一部ではありません

Linq Parallel Foreach

Linq Foreachのように、これは仕事を並行して行います。つまり、コレクション内のすべてのアイテムが、指定されたアクションを同時に同時に実行することを意味します。

collection.AsParallel().ForAll(item => item.DoSomething());

/// or
collection.AsParallel().ForAll(item => DoSomething(item));

ブレーク

時には、ループの途中でループ条件をチェックする必要があります。前者はおそらく後者よりエレガントです:

for (;;)
{
    // precondition code that can change the value of should_end_loop expression

    if (should_end_loop)
        break;

    // do something
}

代替:

bool endLoop = false;
for (; !endLoop;)
{
    // precondition code that can set endLoop flag

    if (!endLoop)
    {
        // do something
    }
}

注意:ネストされたループやswitchは、単純なbreak以上のものを使用する必要があります。

Foreachループ

foreachは、 IEnumerableIEnumerable<T>がそれを継承することに注意してください)を実装するクラスのオブジェクトを繰り返し処理します。このようなオブジェクトには、組み込み関数がいくつか含まれていますが、 List<T>T[] (任意の型の配列)、 Dictionary<TKey, TSource> 、およびIQueryableICollectionなどのインターフェイスに限定されません。

構文

foreach(ItemType itemVariable in enumerableObject)
    statement;

備考

  1. ItemTypeタイプはアイテムの正確なタイプと一致する必要はなく、アイテムのタイプから割り当てることができます
  2. ItemType代わりに、代わりにvarを使用して、 IEnumerable実装の汎用引数を検査することによって、enumerableObjectからアイテム型を推測します
  3. ステートメントは、ブロック、単一ステートメント、または空のステートメント( ; )でもかまい;
  4. enumerableObjectIEnumerable実装していない場合、コードはコンパイルされません
  5. 各繰り返しの間、現在の項目はItemTypeキャストされItemType (これが指定されていなくてもvarを介してコンパイラー推論されても)。項目をキャストできない場合、 InvalidCastExceptionがスローされます。

この例を考えてみましょう。

var list = new List<string>();
list.Add("Ion");
list.Add("Andrei");
foreach(var name in list)
{
    Console.WriteLine("Hello " + name);
}

次のものと同等です。

var list = new List<string>();
list.Add("Ion");
list.Add("Andrei");
IEnumerator enumerator;
try
{
    enumerator = list.GetEnumerator();
    while(enumerator.MoveNext())
    {
        string name = (string)enumerator.Current;
        Console.WriteLine("Hello " + name);
    }
}
finally
{
    if (enumerator != null)
        enumerator.Dispose();
}

whileループ

int n = 0;
while (n < 5) 
{
    Console.WriteLine(n);
    n++;
}

出力:

0
1
2
3
4

IEnumeratorsはwhileループで反復することができます:

// Call a custom method that takes a count, and returns an IEnumerator for a list
// of strings with the names of theh largest city metro areas.
IEnumerator<string> largestMetroAreas = GetLargestMetroAreas(4);

while (largestMetroAreas.MoveNext())
{
    Console.WriteLine(largestMetroAreas.Current);
}

サンプル出力:

東京/横浜
ニューヨークメトロ
サンパウロ
ソウル/仁川

For Loop

Forループは、ある程度の時間をかけて作業するのに最適です。 Whileループと似ていますが、増分は条件に含まれています。

Forループは次のように設定されます。

for (Initialization; Condition; Increment)
{
    // Code
}

初期化 - ループ内でのみ使用できる新しいローカル変数を作成します。
条件 - ループは、条件が真である場合にのみ実行されます。
インクリメント - ループが実行されるたびに変数がどのように変化するか。

例:

for (int i = 0; i < 5; i++)
{
    Console.WriteLine(i);
}

出力:

0
1
2
3
4

For Loopにスペースを残すこともできますが、機能するためにはすべてのセミコロンが必要です。

int input = Console.ReadLine();    

for ( ; input < 10; input + 2)
{
    Console.WriteLine(input);
}

3の出力:

3
5
7
9
11

Do - Whileループ

whileループと似ていますが、ループ本体の最後の条件をテストする点が異なります。 Do - Whileループは、条件が真であるかどうかにかかわらずループを1回実行します。

int[] numbers = new int[] { 6, 7, 8, 10 };
    
// Sum values from the array until we get a total that's greater than 10,
// or until we run out of values.
int sum = 0;
int i = 0;
do
{
    sum += numbers[i];
    i++;
} while (sum <= 10 && i < numbers.Length);
    
System.Console.WriteLine(sum); // 13

ネストされたループ

// Print the multiplication table up to 5s
for (int i = 1; i <= 5; i++)
{
    for (int j = 1; j <= 5; j++)
    {
        int product = i * j;
        Console.WriteLine("{0} times {1} is {2}", i, j, product);
    }
}

持続する

breakに加えて、キーワードcontinueます。ループを完全に中断するのではなく、単に現在の反復をスキップします。特定の値が設定されている場合にコードを実行したくない場合に便利です。

ここに簡単な例があります:

for (int i = 1; i <= 10; i++)
{
    if (i < 9)
        continue;

    Console.WriteLine(i);
}

結果:

9
10

注意: Continueはwhileループやdo-whileループで最も便利です。 For-loopsは、よく定義された終了条件で、それほど利益を得ることはできません。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow