導入
プロパティを1行ずつ代入したり、Add を何度も呼んだりするのは冗長です。初期化子を使うと、オブジェクトやコレクションの中身を「生成と同時に」宣言的に書けます。
サンプル
// オブジェクト初期化子: プロパティを { } の中でまとめて設定
var u = new User { Name = "Taro", Age = 20 };
Console.WriteLine($"{u.Name} {u.Age}"); // Taro 20
// コレクション初期化子: 要素を { } で並べる(内部で Add が呼ばれる)
var scores = new List<int> { 90, 80, 70 };
Console.WriteLine(scores.Sum()); // 240
// Dictionary も初期化子で書ける
var ages = new Dictionary<string, int> { ["Taro"] = 20, ["Jiro"] = 18 };
Console.WriteLine(ages["Taro"]); // 20
class User { public string Name = ""; public int Age; }
- オブジェクト初期化子
{ Prop = 値, ... }は生成直後にプロパティを設定する - コレクション初期化子
{ 要素, ... }は内部でAddを呼ぶ - Dictionary は
{ [キー] = 値 }の形で書ける
やってみよう
List<User> を、ユーザーの初期化子を入れ子にして一気に作ってみましょう(new List<User> { new User { ... }, ... })。宣言的に書けることを体感できます。
演習
// TODO: コレクション初期化子で {3, 1, 2} を持つ List<int> を作り、合計を出力してください
var nums = ___;
Console.WriteLine(nums.Sum()); // 6
- 期待される出力:
6
ヒント1を見る
new List<int> { 3, 1, 2 } と書きます
ヒント2を見る
{ } の中に要素をカンマ区切りで並べると内部で Add されます
まとめ
- 初期化子は「生成と同時に中身を宣言的に書く」しくみ
- オブジェクトはプロパティ、コレクションは要素を
{ }に並べる Addの連打やプロパティの逐次代入を減らせる
次回: 型を引数のように扱う「ジェネリックメソッド」です。