サーチ…
ループスタイル
中
最も単純なループタイプ。ループ内のどこにいるのかを知るための本質的な手がかりがないという欠点しかありません。
/// 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は、 IEnumerable
( IEnumerable<T>
がそれを継承することに注意してください)を実装するクラスのオブジェクトを繰り返し処理します。このようなオブジェクトには、組み込み関数がいくつか含まれていますが、 List<T>
、 T[]
(任意の型の配列)、 Dictionary<TKey, TSource>
、およびIQueryable
やICollection
などのインターフェイスに限定されません。
構文
foreach(ItemType itemVariable in enumerableObject)
statement;
備考
-
ItemType
タイプはアイテムの正確なタイプと一致する必要はなく、アイテムのタイプから割り当てることができます -
ItemType
代わりに、代わりにvar
を使用して、IEnumerable
実装の汎用引数を検査することによって、enumerableObjectからアイテム型を推測します - ステートメントは、ブロック、単一ステートメント、または空のステートメント(
;
)でもかまい;
-
enumerableObject
がIEnumerable
実装していない場合、コードはコンパイルされません - 各繰り返しの間、現在の項目は
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は、よく定義された終了条件で、それほど利益を得ることはできません。