1. ホーム
  2. c#

[解決済み】匿名クラスの汎用リスト

2022-03-24 20:23:17

質問

C# 3.0では、次の構文で匿名クラスを作成することができます。

var o = new { Id = 1, Name = "Foo" };

これらの匿名クラスを一般的なリストに追加する方法はありますか?

var o = new { Id = 1, Name = "Foo" };
var o1 = new { Id = 2, Name = "Bar" };

List<var> list = new List<var>();
list.Add(o);
list.Add(o1);

もう一つの例

List<var> list = new List<var>();

while (....)
{
    ....
    list.Add(new {Id = x, Name = y});
    ....
}

解決方法は?

することができます。

var list = new[] { o, o1 }.ToList();

この猫の皮を剥ぐ方法はたくさんありますが、基本的にはすべてどこかで型推論を使っています。つまり、ジェネリックメソッドを(おそらく拡張メソッドとして)呼び出す必要があるのです。他の例としては、以下のようなものがあります。

public static List<T> CreateList<T>(params T[] elements)
{
     return new List<T>(elements);
}

var list = CreateList(o, o1);

アイデア次第です :)