本文へスキップ
BecomeCoder

C#オブジェクト指向コース · 第5章 オブジェクト指向の実践テクニック · レッスン35

オブジェクト初期化子・コレクション初期化子

ブラウザで完結

導入

プロパティを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 の連打やプロパティの逐次代入を減らせる

次回: 型を引数のように扱う「ジェネリックメソッド」です。

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

C# — ブラウザ内で実行

ブラウザ内でC#を動かす環境を読み込みます(初回のみ数秒)。
スクロールして表示された時点でも自動で読み込まれます。