いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

C#3.0の追加機能-04(匿名型の作成(Anonymous Type))


C# 3.0からは匿名型が作成できるようになっています。
作り方は以下のようにします。

var anonymousType = new{ プロパティ1=xxxx, プロパティ2=xxxx ......};

指定できるのは、プロパティのみとなります。
また、匿名の型のインスタンスとなりますので、必ずvarで宣言する必要があります。
一旦インスタンス化した後は、他のインスタンスと同じように扱えます。


また、匿名型を作成しても、内部で宣言したプロパティが同じ場合は同じTypeのインスタンス
となります。
つまり、

var anonType1 = new{ Name="gsf_zero1", Age=28 };

var anonType2 = new{ Name="gsf_zero2", Age=30 };

の場合、2つのオブジェクトは同じTypeとなります。


以下、サンプルです。

// vim:set ts=4 sw=4 et ws is nowrap ft=cs:
using System;

namespace Gsf.Samples.Tmp{

    public class AnonymousTypeSample : IExecutor{
        
        public void Execute(){
            //
            // 匿名型を作成する。
            // 
            var anonType1 = new{ Name="gsf_zero1", Age=28 };

            Console.WriteLine("Name={0}, Age={1}", anonType1.Name, anonType1.Age);

            //
            // 匿名型の実際の型名称を表示.
            //
            Console.WriteLine(anonType1.GetType().Name);

            //
            // 同じプロパティ名を持つ別の匿名型を作成する。
            //
            var anonType2 = new{ Name="gsf_zero2", Age=30 };

            Console.WriteLine("Name={0}, Age={1}", anonType2.Name, anonType2.Age);

            //
            // 2つ目の匿名型の型名称を表示.
            //
            Console.WriteLine(anonType2.GetType().Name);

            //
            // 別々に作成した匿名型でも、プロパティが同じ場合は同じ型のインスタンスとなるかどうか?
            //
            Console.WriteLine(anonType1.GetType() == anonType2.GetType());
        }
    }
}