3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(.Net)C#3.0からオブジェクトのコレクションの初期化が簡潔に書けるようになってた

C#3.0(.Net Framwork3.5)からオブジェクトの初期化が簡単に書けるようになってたようです。

以前(C#2.0)はこのように書いてました。

public class TestClass{

public string Name { get; set; }

public int Id { get; set; }

}

 

 

private void button1_Click(object sender, EventArgs e){

//テスト用のデータ生成

List lst = new List();

lst.Add(new TestClass() );

lst[0].Id = 2;

lst[0].Name = "a";

lst.Add(new TestClass() );

lst[1].Id = 1;

lst[1].Name = "b";

}

しかし、C#3.0からは下記のようにすることで、インスタンス作成時に1行でPublicメンバの初期化ができます。

private void button1_Click(object sender, EventArgs e){

//テスト用のデータ生成

List lst = new List();

lst.Add(new TestClass() { Name="a",Id = 2 });

lst.Add(new TestClass() { Name="b",Id = 1 });

}

ただこのようなインスタンス作成時の初期化はそれ用のコンストラクタを作成して使うべきだと思うんですがどうでしょう。。

また、インスタンス作成時だけでなくコレクションでも初期化が簡潔に書けるようになったようです。

上記で取り上げたオブジェクトイニシャライザとコレクション初期化子を組み合わせると下記のようになります。(C#)

private void button1_Click(object sender, EventArgs e){

List dataSource2 = new List() {

new TestClass() { Name="a",Id = 2 },

new TestClass() { Name="b",Id = 1 }

};

}

参考:

CSharp 3.0 - CSharp - Jankh メモ Wiki