目次
List<T>の初期化
System.Collections.Generic.List<T>は、C#において最もよく使われる動的サイズのコレクション(データの集まり)です。
従来、List<T>に初期データを追加するには、インスタンスを作成した後にAddメソッドを繰り返し呼び出す必要がありました。
// 従来の初期化方法
var weekdays = new List<string>();
weekdays.Add("Monday");
weekdays.Add("Tuesday");
weekdays.Add("Wednesday");
この方法は機能しますが、初期値が決まっている場合、コードが冗長になりがちです。
コレクション初期化子による簡潔な初期化
C# 3.0以降、「コレクション初期化子」という構文が導入されました。これにより、newキーワードでのインスタンス生成と同時に、波括弧{ ... }の中に初期要素を列挙することができます。
この構文は、内部的にはコンパイラが自動的にAddメソッドを呼び出すコードに展開してくれますが、開発者は非常に簡潔な記述で初期化を完了できます。
コード例1:List<string> の初期化
string型(文字列)のリストを、宣言と同時にコレクション初期化子で作成する例です。
using System;
using System.Collections.Generic; // List<T> を使うために必要
public class ListStringInitExample
{
public static void Main()
{
// 宣言と同時に { } 内の要素で List を初期化
var weekdays = new List<string>
{
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday"
};
Console.WriteLine("--- 曜日のリスト ---");
// string.Join でリストの内容をカンマ区切りで出力
Console.WriteLine(string.Join(", ", weekdays));
}
}
出力結果:
--- 曜日のリスト ---
Monday, Tuesday, Wednesday, Thursday, Friday
コード例2:List<int> の初期化
int型(整数)のような値型のリストでも、使い方は全く同じです。
using System;
using System.Collections.Generic;
public class ListIntInitExample
{
public static void Main()
{
// int 型のリストを初期化
var testScores = new List<int> { 95, 88, 76, 100, 91 };
int totalScore = 0;
foreach (var score in testScores)
{
totalScore += score;
}
Console.WriteLine("--- スコアのリスト ---");
Console.WriteLine($"要素数: {testScores.Count}");
Console.WriteLine($"合計点: {totalScore}");
}
}
出力結果:
--- スコアのリスト ---
要素数: 5
合計点: 450
まとめ
List<T>をnew List<T> { ... }というコレクション初期化子構文を使って初期化することで、Addメソッドを個別に呼び出す必要がなくなり、コードが大幅に簡潔になります。
配列の初期化構文(new int[] { ... })と非常によく似た感覚で、List<T>のインスタンス生成と初期値の追加を同時に行うことができます。
