.NET ヘルプ

C# 匿名オブジェクト(開発者向けの仕組み)

ジョルディ・バルディア
ジョルディ・バルディア
2025年1月14日
共有:

匿名オブジェクトの導入

C#の匿名型は、正式なクラス宣言を明示的に定義することなく、パブリックな読み取り専用プロパティを単一の匿名型オブジェクトにカプセル化するための仕組みを提供します。 それは単一オブジェクト構造に有用です。 それらはコンパイラーによって生成される型で、System.Objectから直接派生しており、オブジェクトのプロパティを効率的にカプセル化し、軽量で不変なデータコンテナとして機能します。 これらのタイプはシールドクラスであり、コンパイラーが自動的に型名を推論および生成し、その型名はソースコードレベルではアクセスできないままです。 また発見する予定ですIronPDF.NETプロジェクト用のPDFライブラリとして。

主な特徴

  • 匿名型は、その機能が厳密に制限されています。
  • プロパティは匿名型のプロパティ定義において、自動的にパブリックの読み取り専用プロパティとして実装されます。
  • ユーザーは、その中でequalsメソッドやgethashcodeメソッドのようなメソッド、イベント、その他のクラスメンバーを明示的に定義することはできません。
  • 匿名型の整合性を確保するため、null 値、匿名関数、またはポインター型で初期化することはできません。

一般的な使用事例

LINQ操作

匿名型オブジェクトは、特に匿名型オブジェクトのselect句において、LINQクエリ式で優れた性能を発揮し、大きなオブジェクトから特定のプロパティのサブセットを効率的に返します。 このアプローチは、必要なデータだけを含む一時的なオブジェクトを作成することによって、メモリ使用量を最適化します。

一時的なデータグループ化

正式なクラスを作成するには過剰な場合に、一時的なデータ構造の効率的なコンテナとして機能します。これは、短期間のデータ変換や中間計算に特に有用です。

プロパティのカプセル化

匿名型は、読み取り専用のプロパティを使用して関連するオブジェクトプロパティをまとめるための効率的な手段を提供します。 コンパイラは、プロパティアクセスの簡潔な構文を維持しながら型の安全性を保証します。

構文と構造

匿名型の作成は、varキーワードとnew演算子およびオブジェクト初期化子構文を使用する特定のパターンに従います。 コンパイラは、自動的にソースコードレベルではアクセスできない型名を生成します。

var person = new { FirstName = "Iron", LastName = "Dev", Age = 35 }; // public int age in this anonymous type
var person = new { FirstName = "Iron", LastName = "Dev", Age = 35 }; // public int age in this anonymous type
Private person = New With {
	Key .FirstName = "Iron",
	Key .LastName = "Dev",
	Key .Age = 35
}
$vbLabelText   $csharpLabel

プロパティ初期化規則

コンパイラは、匿名型のプロパティ初期化に厳格なルールを適用します。すべてのプロパティはオブジェクト作成時に初期化されなければならず、null値やポインタ型を割り当てることはできません。初期化された後は、匿名型のプロパティ値は標準的なドット表記を使用してアクセスできますが、初期化後にそれを変更することはできません。これは読み取り専用の性質によるものです。

型推論とマッチング

var person1 = new { Name = "Iron", Age = 30 };
var person2 = new { Name = "Dev", Age = 25 };
var person1 = new { Name = "Iron", Age = 30 };
var person2 = new { Name = "Dev", Age = 25 };
Dim person1 = New With {
	Key .Name = "Iron",
	Key .Age = 30
}
Dim person2 = New With {
	Key .Name = "Dev",
	Key .Age = 25
}
$vbLabelText   $csharpLabel

コンパイラは、プロパティ名、型、および順序が一致する匿名型に対して同一の型情報を生成します。 これにより、インスタンス間の型互換性が同じアセンブリ内でコレクションで使用されたり、メソッドのパラメーターとして渡されたりすることができます。

ネストされた匿名型

匿名データ型は、匿名型オブジェクトプロパティを持つ複雑なネスト構造をサポートします。 それは階層型データ表現の作成に役立ちます。

var student = new {
    Id = 1,
    PersonalInfo = new {
        Name = "James",
        Contact = new {
            Email = "james@email.com",
            Phone = "123-456-7890"
        }
    },
    Grades = new { Math = 95, Science = 88 }
};
var student = new {
    Id = 1,
    PersonalInfo = new {
        Name = "James",
        Contact = new {
            Email = "james@email.com",
            Phone = "123-456-7890"
        }
    },
    Grades = new { Math = 95, Science = 88 }
};
Dim student = New With {
	Key .Id = 1,
	Key .PersonalInfo = New With {
		Key .Name = "James",
		Key .Contact = New With {
			Key .Email = "james@email.com",
			Key .Phone = "123-456-7890"
		}
	},
	Key .Grades = New With {
		Key .Math = 95,
		Key .Science = 88
	}
}
$vbLabelText   $csharpLabel

コレクション操作

匿名型は、コレクションの操作やデータの変換を含むシナリオで優れています。

var items = new[] {
    new { ProductId = 1, Name = "Laptop", Price = 1200.00m },
    new { ProductId = 2, Name = "Mouse", Price = 25.99m },
    new { ProductId = 3, Name = "Keyboard", Price = 45.50m }
};
var items = new[] {
    new { ProductId = 1, Name = "Laptop", Price = 1200.00m },
    new { ProductId = 2, Name = "Mouse", Price = 25.99m },
    new { ProductId = 3, Name = "Keyboard", Price = 45.50m }
};
Dim items = {
	New With {
		Key .ProductId = 1,
		Key .Name = "Laptop",
		Key .Price = 1200.00D
	},
	New With {
		Key .ProductId = 2,
		Key .Name = "Mouse",
		Key .Price = 25.99D
	},
	New With {
		Key .ProductId = 3,
		Key .Name = "Keyboard",
		Key .Price = 45.50D
	}
}
$vbLabelText   $csharpLabel

IronPDF: C# PDFライブラリ

IronPDFは、.NET アプリケーションで PDF ドキュメントを生成、編集、管理するための強力なライブラリです。 C#を扱う際、開発者は通常、軽量でアドホックなデータ構造のために匿名オブジェクトを使用します。特に、クラス全体を作成する必要がない場合のシナリオでよく使用されます。 これらの匿名オブジェクトは、IronPDFとシームレスに利用できます。PDFドキュメントを動的に作成する. 迅速なデータからPDFへのワークフローのための柔軟なソリューションの作成に役立ちます。 以下は、匿名オブジェクトを使ってIronPDFがどのように機能するかを示す例です。

例: 匿名オブジェクトを使用してPDFにデータを入力する

販売データのリストをPDFでテーブルとして表示したいと想像してください。 正式なクラスを作成する代わりに、匿名オブジェクトを使用してデータを迅速にフォーマットし、レンダリングすることができます。

using IronPdf;
using System;
using System.Linq;
class Program
{
    static void Main()
    {
        License.LicenseKey = "Licenes-Key";
        // Sample data using anonymous objects
        var salesData = new[]
        {
            new { Product = "Laptop", Quantity = 2, Price = 1200.50 },
            new { Product = "Smartphone", Quantity = 5, Price = 800.00 },
            new { Product = "Headphones", Quantity = 10, Price = 150.75 }
        };
        // Create an HTML string dynamically using the anonymous object data
        var htmlContent = @"
        <html>
        <head><style>table {border-collapse: collapse;} th, td {border: 1px solid black; padding: 5px;}</style></head>
        <body>
        <h1>Sales Report</h1>
        <table>
            <thead>
                <tr>
                    <th>Product</th>
                    <th>Quantity</th>
                    <th>Price</th>
                </tr>
            </thead>
            <tbody>
                " +
            string.Join("", salesData.Select(item =>
                $"<tr><td>{item.Product}</td><td>{item.Quantity}</td><td>{item.Price:C}</td></tr>")) +
            @"
            </tbody>
        </table>
        </body>
        </html>";
        // Generate the PDF
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        // Save the PDF
        pdf.SaveAs("SalesReport.pdf");
        Console.WriteLine("PDF generated successfully!");
    }
}
using IronPdf;
using System;
using System.Linq;
class Program
{
    static void Main()
    {
        License.LicenseKey = "Licenes-Key";
        // Sample data using anonymous objects
        var salesData = new[]
        {
            new { Product = "Laptop", Quantity = 2, Price = 1200.50 },
            new { Product = "Smartphone", Quantity = 5, Price = 800.00 },
            new { Product = "Headphones", Quantity = 10, Price = 150.75 }
        };
        // Create an HTML string dynamically using the anonymous object data
        var htmlContent = @"
        <html>
        <head><style>table {border-collapse: collapse;} th, td {border: 1px solid black; padding: 5px;}</style></head>
        <body>
        <h1>Sales Report</h1>
        <table>
            <thead>
                <tr>
                    <th>Product</th>
                    <th>Quantity</th>
                    <th>Price</th>
                </tr>
            </thead>
            <tbody>
                " +
            string.Join("", salesData.Select(item =>
                $"<tr><td>{item.Product}</td><td>{item.Quantity}</td><td>{item.Price:C}</td></tr>")) +
            @"
            </tbody>
        </table>
        </body>
        </html>";
        // Generate the PDF
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        // Save the PDF
        pdf.SaveAs("SalesReport.pdf");
        Console.WriteLine("PDF generated successfully!");
    }
}
Imports IronPdf
Imports System
Imports System.Linq
Friend Class Program
	Shared Sub Main()
		License.LicenseKey = "Licenes-Key"
		' Sample data using anonymous objects
		Dim salesData = {
			New With {
				Key .Product = "Laptop",
				Key .Quantity = 2,
				Key .Price = 1200.50
			},
			New With {
				Key .Product = "Smartphone",
				Key .Quantity = 5,
				Key .Price = 800.00
			},
			New With {
				Key .Product = "Headphones",
				Key .Quantity = 10,
				Key .Price = 150.75
			}
		}
		' Create an HTML string dynamically using the anonymous object data
		Dim htmlContent = "
        <html>
        <head><style>table {border-collapse: collapse;} th, td {border: 1px solid black; padding: 5px;}</style></head>
        <body>
        <h1>Sales Report</h1>
        <table>
            <thead>
                <tr>
                    <th>Product</th>
                    <th>Quantity</th>
                    <th>Price</th>
                </tr>
            </thead>
            <tbody>
                " & String.Join("", salesData.Select(Function(item) $"<tr><td>{item.Product}</td><td>{item.Quantity}</td><td>{item.Price:C}</td></tr>")) & "
            </tbody>
        </table>
        </body>
        </html>"
		' Generate the PDF
		Dim renderer = New ChromePdfRenderer()
		Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
		' Save the PDF
		pdf.SaveAs("SalesReport.pdf")
		Console.WriteLine("PDF generated successfully!")
	End Sub
End Class
$vbLabelText   $csharpLabel

C# 匿名オブジェクト(開発者向けの動作方法):図1 - 上記コード例のコンソール出力

結論

C# 匿名オブジェクト(開発者のための仕組み):図2 - IronPDF ライセンスページ

C#の匿名型は、正式なクラス宣言なしに一時的なデータ構造を作成するための柔軟で効率的な方法を提供します。 それらは、LINQクエリ、データ変換、IronPDFのようなライブラリを扱う際に特に有用です。 匿名型をIronPDFのPDF生成機能と組み合わせることで、動的でデータ駆動のPDFを最小限のコードで作成するための強力なソリューションを提供します。

IronPDFは、開発者がその機能をテストできるようにします。無料試用、.NETアプリケーションでその機能を簡単に探索できるようにします。 商用ライセンスは749ドルから始まり、ハイパフォーマンスなHTMLからPDFへのレンダリング、PDFの編集、セキュリティ機能を含むすべての機能セットへのアクセスを許可します。

ジョルディ・バルディア
ソフトウェアエンジニア
ジョルディは、Iron Softwareでのスキルを活かしていないときには、ゲームプログラミングをしており、Python、C#、C++に最も堪能です。彼は製品テスト、製品開発、研究の責任を共有しており、継続的な製品改善に大きな価値をもたらしています。この多様な経験は彼を常に挑戦的で魅力的に保ち、彼はIron Softwareで働く一番好きな側面の一つだと言っています。ジョルディはフロリダ州マイアミで育ち、フロリダ大学でコンピューターサイエンスと統計学を学びました。
< 以前
C# Out パラメーター (その仕組み: 開発者のためのガイド)
次へ >
C# 並列Foreach(開発者向けの仕組み)