ヘッダー
C# サンプル集
 

foreach による繰り返し

2022/9/25

→ Visual Basic のサンプルに切り替える → Python のサンプルに切り替える

 

Listの要素の繰り返し

var items = new List<string>() {"Apple", "Banana", "Cat", "Dog"};

//型推論により item は string型になります。
foreach(var item in items)
{
    System.Diagnostics.Debug.WriteLine(item);
}

Debug.WriteLineが表示される場所

実行すると下記の通り出力されます。

Apple
Banana
Cat
Dog

 

 

Dictionaryの要素の繰り返し

var items = new Dictionary<string, string>()
        {{"A", "Apple"}, {"B","Banana"}, {"C","Cat"}, {"D","Dog"}};

//型推論により item は KeyValuePair型になります。
foreach (var item in items)
{
    System.Diagnostics.Debug.WriteLine($"{item.Key}={item.Value}");
}

Debug.WriteLineが表示される場所

実行すると下記の通り出力されます。

A=Apple
B=Banana
C=Cat
D=Dog

 

 

配列の要素の繰り返し

var items = new string[] {"Apple", "Banana", "Cat", "Dog"};

//型推論により item は string型になります。
foreach(var item in items)
{
    System.Diagnostics.Debug.WriteLine(item);
}

Debug.WriteLineが表示される場所

実行すると下記の通り出力されます。

Apple
Banana
Cat
Dog

 

 

文字列内の文字を列挙する

string value = "🗿モアイ";

//型推論により letter は Rune型になります。
foreach(var letter in value.EnumerateRunes())
{
    System.Diagnostics.Debug.WriteLine(letter);
}

Debug.WriteLineが表示される場所

実行すると下記の通り出力されます。

🗿


 

 

C:\Windows にあるファイルを列挙

//型推論により fileName は string型になります。
foreach(var fileName in System.IO.Directory.EnumerateFiles(@"C:\Windows"))
{
    System.Diagnostics.Debug.WriteLine(fileName);
}

Debug.WriteLineが表示される場所

 

 

C:\Windows にあるファイルとサイズを列挙

var winFolder = new System.IO.DirectoryInfo(@"C:\Windows");

//型推論により file は FileInfo型になります。
foreach(var file in winFolder.EnumerateFiles())
{
    System.Diagnostics.Debug.WriteLine($"{file.Name} {file.Length / 1024:#,0} KB");
}

Debug.WriteLineが表示される場所

 

 

環境変数の列挙

//型推論だと env が Objectg型になり不便なので、自分で明示的に型を指定します。
foreach(DictionaryEntry env in Environment.GetEnvironmentVariables())
{
    System.Diagnostics.Debug.WriteLine($"{env.Key} = {env.Value}");
}

Debug.WriteLineが表示される場所

 

 

繰り返し回数を取得する

var items = new List<string>() {"Apple", "Banana", "Cat", "Dog"};
int counter = 0;

//型推論により item は string型になります。
foreach(var item in items)
{
    counter += 1;
    System.Diagnostics.Debug.WriteLine($"{counter}個目 = {item}");
}

Debug.WriteLineが表示される場所

実行すると下記の通り出力されます。

1個目 = Apple
2個目 = Banana
3個目 = Cat
4個目 = Dog

 

 

途中でループから抜け出す (break)

この例は本来4回繰り返す指定になっていますが、if 文で条件判断して"Cat"の周で抜けます。

var items = new List<string>() {"Apple", "Banana", "Cat", "Dog"};

//型推論により item は string型になります。
foreach(var item in items)
{
    System.Diagnostics.Debug.WriteLine(item);
    if (item == "Cat")
    {
        break;
    }
}

System.Diagnostics.Debug.WriteLine("終了");

Debug.WriteLineが表示される場所

実行すると下記の通り出力されます。

Apple
Banana
Cat
終了

 

 

ループがすべて完了したか確認する (たとえば、breakしていないかどうか)

この例では 変数 item が "Eagle" の場合 break します。ループの処理がすべて終わった後に break して終わったのか、break しないで終わったのかメッセージを出力します。 このまま実行すると item が "Eagle" になることはないので break は発生しないで終了します。

var items = new List<string>() {"Apple", "Banana", "Cat", "Dog"};

bool isBreak = false;

//型推論により item は string型になります。
foreach(var item in items)
{
    System.Diagnostics.Debug.WriteLine(item);
    if (item == "Eagle") //←ここを item == "Banana" などに変えると、最後のメッセージが出力されなくなります。
    {
        isBreak = true; 
        break;
    }
}

if (!isBreak)
{
    System.Diagnostics.Debug.WriteLine("breakしないでループを終了しました。"); //←これが出力されます。
}

メモ:ループが完了したかを検出する特別な機能はありません。

 

 

その周を中断し、次の周を開始する (continue)

if 文で条件判断して"Banana" と "Cat" であれば処理を中断して次の周を開始します。

var items = new List<string>() {"Apple", "Banana", "Cat", "Dog"};

//型推論により item は string型になります。
foreach(var item in items)
{
    System.Diagnostics.Debug.WriteLine(item + " 開始");
    if (item == "Banana" || item == "Cat")
    {
        continue;
    }
    System.Diagnostics.Debug.WriteLine(item + " 終了");
}

Debug.WriteLineが表示される場所

実行すると下記の通り出力されます。

Apple開始
Apple終了
Banana開始
Cat開始
Dog開始
Dog終了

 

 

2重ループで九九の表を作成する

foreach(int x in Enumerable.Range(1, 9))
{
    foreach(int y in Enumerable.Range(1, 9))
    {
        System.Diagnostics.Debug.Write($"\t{x * y}");
    }
    System.Diagnostics.Debug.WriteLine("");
}

Debug.WriteLineが表示される場所

実行すると下記の通り出力されます。

 

 

列挙型を繰り返す

この例では DayOfWeek 列挙型 のメンバーを列挙します。

foreach (var value in Enum.GetValues<DayOfWeek>())
{
    string name = Enum.GetName(value)!;
    System.Diagnostics.Debug.WriteLine($"{(int)value}:{name}");
}

Debug.WriteLineが表示される場所

実行すると下記の通り出力されます。

0:Sunday
1:Monday
2:Tuesday
3:Wednesday
4:Thursday
5:Friday
6:Saturday

 

 

タプルの要素の繰り返し

var items = ("Apple", "Banana", "Cat", "Dog");

System.Runtime.CompilerServices.ITuple sugarTuple = items;

foreach(int index in Enumerable.Range(0, sugarTuple.Length))
{
    System.Diagnostics.Debug.WriteLine(sugarTuple[index]);
}

Debug.WriteLineが表示される場所

メモ:タプルは繰り返されることを想定したオブジェクトではありません。

実行すると下記の通り出力されます。

Apple
Banana
Cat
Dog