43 votes

Puis-je spécifier un nom significatif pour une classe anonyme en C# ?

Nous savons tous que lorsque nous créons une classe anonyme comme celle-ci :

var Employee = new { ID = 5, Name= "Prashant" };

...au moment de l'exécution, il sera de type :

<>f__AnonymousType0<int,string>

Existe-t-il un moyen de donner un nom significatif à ces classes ?

126voto

Chad Grant Points 16571
public class Employee {}

38voto

Chris Points 3290

C'est un type anonyme, ce qui va à l'encontre du but recherché. Ces objets sont conçus pour être temporaires. Bon sang, les propriétés sont même en lecture seule.

Désolé, je fais le malin. La réponse est non, il n'y a aucun moyen d'indiquer au compilateur le nom à utiliser pour un type anonyme.

En fait, les noms des types générés par le compilateur utilisent des caractères illégaux dans leur dénomination, de sorte que vous ne pouvez pas avoir de collision de noms dans votre application.

36voto

Nick Berardi Points 31361
public class Employee {
    public int ID { get; set; }
    public string Name { get; set; }
}

Utilisez ensuite la syntaxe suivante

var employee = new Employee { ID = 5, Name = "Prashant" };

24voto

Dead account Points 8640

En faire une classe ordinaire avec un nom ?

public class Employee
{
    public int ID;
    public string Name;
}

var Employee = new Employee { ID = 5, Name= "Prashant" };

24voto

Mia Clarke Points 4525

En fait, si vous n'avez pas peur d'aller au fond des choses, vous pouvez utiliser TypeBuilder pour créer votre propre type d'exécution basé sur votre type anonyme, ce qui vous permettra de spécifier un nom pour le type. Bien sûr, il est beaucoup plus facile de déclarer une classe comme presque tout le monde dans ce fil de discussion a suggéré, mais la façon TypeBuilder est beaucoup plus excitante ;)

TypeBuilder

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X