C#でリストをループして中身を見る方法です。
リストをループする方法
C#でリストをループする方法は、
- foreach文
- for文
- ForEachメソッド
の3つの方法があります。
ただし、ForEachメソッドについては、breakステートメント・continueステートメントが使えないというデメリットがあります。ループ処理としては致命的です。
なので、foreach文・for文を使った方法を紹介します。
確認のため、次の画面を作成しました。
仕様はとても簡単で、
- 実行ボタン押下
- リスト作成
- テキストボックスに表示
というものです。実行ボタンのクリックイベント内でリストを生成しています。
foreach文
foreach文は全てループするため、リスト内の全ての要素を見る場合に使います。
foreach文でリストをループするためのサンプルコードを紹介します。
private void cmdViewText_Click(object sender, EventArgs e) { try { //リストの宣言・初期化 List strList = new List(); //要素の追加 strList.Add("Japan"); strList.Add("USA"); strList.Add("UK"); strList.Add("CHINA"); strList.Add("INDIA"); //foreachループ(全走査) foreach (string strTemp in strList) { //テキストボックスに表示 txtView.Text = txtView.Text + strTemp + Environment.NewLine; //見た目のため末尾に改行コード挿入 } } catch (Exception ex) { MessageBox.Show(ex.Message , "エラー" , MessageBoxButtons.OK , MessageBoxIcon.Error); } }
実際に実行すると、結果はこうなります。
上記はテキストボックスに表示するためのコードなので、基本的には次の形になります。
foreach (string strTemp in strList) { //ここに処理を書く }
例えば、次の様にif文を書いて、特定の文字の場合に別処理に分岐するというコードを書くなど、ご自身でカスタマイズしてみて下さい。
//foreachループ(全走査) foreach (string strTemp in strList) { //テキストボックスに表示 if (strTemp == "USA") { MessageBox.Show(strTemp); } txtView.Text = txtView.Text + strTemp + Environment.NewLine; //見た目のため末尾に改行コード挿入 }
for文
for文もリスト内をループするために利用出来ますが、指定した条件でループします。また、回数を管理するループ様の変数を利用して特定条件の場合のみ処理を実行する方法にも使えます。
foreach文と同じように、全てループする場合は次の様に記載します。
private void cmdViewText_Click(object sender, EventArgs e) { try { //リストの宣言・初期化 List strList = new List(); //要素の追加 strList.Add("Japan"); strList.Add("USA"); strList.Add("UK"); strList.Add("CHINA"); strList.Add("INDIA"); //forループ(全走査) for (int i = 0; i < strList.Count; i++) { //テキストボックスに表示 txtView.Text = txtView.Text + strList[i] + Environment.NewLine; //見た目のため末尾に改行コード挿入 } } catch (Exception ex) { MessageBox.Show(ex.Message , "エラー" , MessageBoxButtons.OK , MessageBoxIcon.Error); } }
実行すると、先ほどのforeach文と同じ結果になります。
for文の場合の基本形は次の様な形です。
//forループ(全走査)
for (int i = 0; i < strList.Count; i++)
{
//ここに処理を書く
}
例えば、次の様にif文を書いて、特定の文字の場合に別処理に分岐するというコード書くことが出来ます。インデックスを利用して扱う場合、foreach文よりも分かりやすいと思います。
テキストボックスを二つ用意して、リストの奇数番目に入っている要素を上のテキストボックスに、偶数番目に入っている要素を下のテキストボックスに表示するサンプルは下記の様に記述します。
for文のところを書き換えて、テキストボックスも2つ用意してみて下さい。
//forループ(全走査) for (int i = 0; i < strList.Count; i++) { //奇数の場合は上のテキストボックスに表示 if ((i + 1) % 2 == 1) { txtView1.Text = txtView1.Text + strList[i] + Environment.NewLine; } //偶数の場合は下のテキストボックスに表示 else { txtView2.Text = txtView2.Text + strList[i] + Environment.NewLine; } }
画面も用意しました。
これを実行すると、結果はこうなります。
ちゃんと奇数番目に入っている「Japan」「UK」「INDIA」が上のテキストボックスに、偶数番目に入っている「USA」「CHINA」が下のテキストボックスに表示されました。
参考サイト
List<T> クラス (System.Collections.Generic) | Microsoft Docs
反復ステートメント – C# リファレンス | Microsoft Docs
.