Passer au contenu du pied de page
.NET AIDE

C# Anonymous Object (Comment ça fonctionne pour les développeurs)

Introduction de l'objet anonyme

Les types anonymes en C# fournissent un mécanisme pour encapsuler des propriétés publiques en lecture seule dans un seul objet de type anonyme sans définir explicitement une déclaration de classe formelle. Ils sont utiles pour créer des structures de données à usage unique. Ce sont des types générés par le compilateur qui dérivent directement de System.Object, encapsulant efficacement les propriétés d'objet et servant de conteneurs de données légers et immuables. Ces types sont des classes scellées où le compilateur déduit et génère automatiquement le nom du type, qui reste inaccessible au niveau du code source. Nous découvrirons également IronPDF en tant que bibliothèque PDF pour les projets .NET.

Caractéristiques clés

  • Les types anonymes ont des capacités strictement limitées :
  • Les propriétés sont automatiquement implémentées comme publiques en lecture seule dans la définition de propriété d'un type anonyme.
  • Les utilisateurs ne peuvent pas définir explicitement de méthodes, événements ou autres membres de classe comme les méthodes Equals ou GetHashCode à l'intérieur.
  • Ils ne peuvent pas être initialisés avec des valeurs nulles, des fonctions anonymes ou des types de pointeurs, garantissant ainsi l'intégrité des types anonymes.

Cas d'Utilisation Courants

Opérations LINQ

Les objets de type de données anonymes excellent dans les expressions de requête LINQ, en particulier dans les clauses select pour les objets de type anonyme, où ils renvoient efficacement des sous-ensembles de propriétés spécifiques à partir d'objets plus grands. Cette approche optimise l'utilisation de la mémoire en créant des objets temporaires contenant uniquement les données nécessaires.

Groupement de données temporaires

Ils servent de conteneurs efficaces pour les structures de données temporaires lorsqu'il serait excessif de créer une classe formelle. Cela est particulièrement utile pour les transformations de données de courte durée ou les calculs intermédiaires.

Encapsulation des propriétés

Le type de données anonyme fournit un moyen simple de regrouper les propriétés d'objet liées en utilisant des propriétés en lecture seule. Le compilateur garantit la sécurité des types tout en maintenant une syntaxe concise pour l'accès aux propriétés.

Syntaxe et structure

La création de types anonymes suit un modèle spécifique utilisant le mot-clé var ainsi que la syntaxe de l'opérateur new et de l'initialisation d'objet. Le compilateur génère automatiquement un nom de type qui reste inaccessible au niveau du code source.

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

Règles d'initialisation des propriétés

Le compilateur impose des règles strictes pour l'initialisation des propriétés dans les types anonymes. Toutes les propriétés doivent être initialisées lors de la création de l'objet et ne peuvent pas être affectées à des valeurs nulles ou à des types de pointeurs. Une fois initialisées, les valeurs des propriétés peuvent être accessibles en utilisant la notation par points standard, mais elles ne peuvent pas être modifiées après l'initialisation en raison de leur nature en lecture seule.

Inférence et correspondance des types

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

Le compilateur génère des informations de type identiques pour les types anonymes avec des noms de propriétés, des types et un ordre correspondants. Cela permet la compatibilité des types entre les instances à utiliser dans les collections ou passées en tant que paramètres de méthode au sein du même ensemble.

Types anonymes imbriqués

Les types de données anonymes prennent en charge des structures imbriquées complexes avec des propriétés d'objet de type anonyme. Cela est utile pour la création de représentations de données hiérarchiques :

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

Opérations de collection

Les types anonymes excellent dans les scénarios impliquant la manipulation de collections et la transformation de données :

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 : Bibliothèque PDF C

IronPDF est une bibliothèque puissante pour générer, éditer et gérer des documents PDF dans des applications .NET. Lorsqu'ils travaillent avec C#, les développeurs utilisent souvent des objets anonymes pour des structures de données légères et ad hoc, en particulier dans les scénarios où il n'est pas nécessaire de créer une classe entière. Ces objets anonymes peuvent être utilisés de manière transparente avec IronPDF pour créer des documents PDF dynamiquement. Cela aide à créer une solution flexible pour des flux de travail de données vers PDF rapides. Voici un exemple pour illustrer comment IronPDF fonctionne avec des objets anonymes :

Exemple : Utilisation d'objets anonymes pour remplir un PDF

Imaginez que vous avez une liste de données de vente que vous souhaitez rendre sous forme de tableau dans un PDF. Au lieu de créer une classe formelle, vous pouvez utiliser un objet anonyme pour formater rapidement les données pour le rendu.

using IronPdf;
using System;
using System.Linq;

class Program
{
    static void Main()
    {
        // Set your IronPDF license key here
        License.LicenseKey = "Your-Licence-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()
    {
        // Set your IronPDF license key here
        License.LicenseKey = "Your-Licence-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()
		' Set your IronPDF license key here
		License.LicenseKey = "Your-Licence-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

Objet Anonyme C# (Comment cela fonctionne pour les développeurs) : Figure 1 - Résultat de la console de l'exemple de code ci-dessus

Conclusion

Objet Anonyme C# (Comment cela fonctionne pour les développeurs) : Figure 2 - Page de licence IronPDF

Les types anonymes en C# fournissent un moyen flexible et efficace de créer des structures de données temporaires sans avoir besoin de déclarations de classe formelles. Ils sont particulièrement utiles lors du travail avec des requêtes LINQ, des transformations de données et des bibliothèques comme IronPDF. La combinaison des types anonymes avec les capacités de génération PDF d'IronPDF offre une solution puissante pour créer des PDF dynamiques et pilotés par les données avec un minimum de surcharge de code.

IronPDF permet aux développeurs de tester ses fonctionnalités grâce à un essai gratuit, ce qui facilite l'exploration de ses capacités dans vos applications .NET. Les licences commerciales commencent à $799 et donnent accès à l'ensemble complet de fonctionnalités, y compris le rendu HTML vers PDF haute performance, l'édition PDF et les fonctionnalités de sécurité.

Questions Fréquemment Posées

Quels sont les types anonymes en C# ?

Les types anonymes en C# fournissent un mécanisme pour encapsuler des propriétés publiques en lecture seule dans un seul objet de type anonyme sans déclarer explicitement une classe formelle. Ce sont des types générés par le compilateur utilisés comme conteneurs de données légers et immuables.

Comment puis-je créer un type anonyme en C# ?

Pour créer un type anonyme en C#, vous utilisez le mot-clé var avec l'opérateur new et une syntaxe d'initialisateur d'objet. Le compilateur génère automatiquement le nom et la structure du type à partir des propriétés fournies.

Comment les types anonymes fonctionnent-ils avec les opérations LINQ en C# ?

Les types anonymes excellent dans les expressions de requête LINQ, en particulier dans les clauses select, en renvoyant efficacement des sous-ensembles de propriétés spécifiques à partir de plus grands objets, optimisant ainsi l'utilisation de la mémoire.

Les types anonymes peuvent-ils être utilisés dans des structures imbriquées ?

Oui, les types anonymes peuvent être utilisés dans des structures imbriquées. Cela permet de créer des représentations de données hiérarchiques où les propriétés d'un type anonyme peuvent elles-mêmes être des objets de type anonyme.

Comment puis-je utiliser des objets anonymes pour créer des PDF dynamiques ?

Les objets anonymes peuvent formater rapidement des données pour le rendu dans des PDF dynamiques. En les combinant avec une bibliothèque PDF, comme IronPDF, vous pouvez générer efficacement des PDF avec un minimum de code.

Quelles sont les limitations des types anonymes en C# ?

Les types anonymes sont limités à avoir des propriétés publiques en lecture seule et ne peuvent pas avoir de méthodes, d'événements ou de membres de classe définis explicitement. Ils ne peuvent pas non plus être initialisés avec des valeurs nulles ou des types pointeurs.

Quels sont les cas d'utilisation courants des types anonymes ?

Les cas d'utilisation courants des types anonymes incluent le regroupement temporaire de données, l'encapsulation de propriétés et les opérations de collection où la création d'une classe formelle serait excessive.

Comment les bibliothèques PDF peuvent-elles améliorer les flux de travail de données vers PDF dans les applications .NET ?

Les bibliothèques PDF offrent des outils robustes pour générer, éditer et gérer des documents PDF dans les applications .NET, facilitant des flux de travail de données vers PDF efficaces et améliorant les solutions axées sur les données.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite