スポンサーリンク

.NET Core (C#) 匿名型(匿名クラス)を動的に作成する

スポンサーリンク

匿名クラスをDictionaryなどのコレクションから動的に作成する方法を説明します。

環境(バージョン)

.NETのバージョン

% dotnet --version
5.0.101

本題

匿名型(匿名クラス)を動的に作成するには、System.Dynamic.ExpandoObjectクラスを使用します。サンプルプログラムです。

using System;
using System.Dynamic;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello World!");

        // 動的に作成するプロパティ、値の組み合わせをDictionaryに登録
        var dic = new Dictionary<string, string>();
        dic.Add("key1", "キー1");
        dic.Add("key2", "キー2");

        // 匿名型をDictionaryから作成
        dynamic anonymousType = new ExpandoObject();
        foreach (var item in dic)
        {
            ((IDictionary<string, object>)anonymousType).Add(item.Key, item.Value);
        }

        // 以下の匿名型と同じ
        var test = new { key1 = "キー1", key2 = "キー2" };

        Console.WriteLine(anonymousType.key1);  // キー1
        Console.WriteLine(anonymousType.key2);  // キー2

        Console.WriteLine(test.key1);  // キー1
        Console.WriteLine(test.key2);  // キー2
    }
}

コメント