[C# 入門] 匿名クラス(匿名型)の使い方

匿名クラスは名前のないクラスです。

LINQのSelectメソッド内で複数の値を返すのに使用されます。
Selectメソッドで複数の項目を返すときにわざわざクラスを定義するのはめんどくさいということで生み出されました。

匿名クラスのメンバーはパブリックなプロパティのみになります。
メソッドを定義したり、staticにはできません。

スポンサーリンク

匿名クラスの使い方

匿名クラスは作るにはこんな感じに書きます。
new { } の中にプロパティ名 = 値 をカンマ区切りで指定します。

new { プロパティ名 = 値, プロパティ名 = 値, プロパティ名 = 値 }
using System;
class Program
{
    public static void Main()
    {
        // 匿名クラスを変数に代入
        var a = new { Name = "test", Value = 10 };

        // 匿名クラスのプロパティを表示
        Console.WriteLine($"Name={a.Name}, Value={a.Value}");
    }
}
Name=test, Value=10

匿名クラスを変数に入れるときは、型推論var で受け取ります。

また、プロパティ名を指定せず、値(変数、メンバー名など)だけを指定することができます。その場合、匿名クラスのプロパティ名は変数名、メンバー名と同じになります。

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    public static void Main()
    {
        // SampleDataクラスのリストの宣言と初期化
        List<SampleData> list = new List<SampleData> {
            new SampleData { Data1 = 1, Data2 = 10, Data3 = 100, Data4 = 1000 },
            new SampleData { Data1 = 2, Data2 = 20, Data3 = 200, Data4 = 2000 },
            new SampleData { Data1 = 3, Data2 = 30, Data3 = 300, Data4 = 3000 },
        };

        // LINQのSelectメソッド内で匿名クラスを使い必要な項目だけを返す
        var result = list.Select(sd => new { sd.Data1, sd.Data3 });

        // 結果を表示
        foreach (var sd in result) {
            Console.WriteLine($"Data1={sd.Data1}, Data3={sd.Data3}");
        }
    }
}

class SampleData
{
    public int Data1 { get; set; }
    public int Data2 { get; set; }
    public int Data3 { get; set; }
    public int Data4 { get; set; }
}

17行目のSelectメソッド内でプロパティData1、Data3を持った匿名クラスを返しています。

Data1=1, Data3=100
Data1=2, Data3=200
Data1=3, Data3=300

LINQのSelectメソッドについてはこちら、
[C# LINQ] Selectメソッドで各要素から必要な項目を取り出す


C# プログラミング講座に戻る

コメント

タイトルとURLをコピーしました