web-dev-qa-db-fra.com

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 spécifier un nom significatif pour ces classes?

43
public class Employee {}
126
Chad Grant

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

Désolé, je suis un cul intelligent. La réponse est non, il n'y a aucun moyen de dire au compilateur quel 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 afin que vous ne puissiez pas avoir de collision de noms dans votre application.

38
Chris
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" };
36
Nick Berardi

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" };
24
Dead account

En fait, si vous n'avez pas peur de devenir extrêmement sérieux, vous pouvez utiliser TypeBuilder pour créer votre propre type d'exécution en fonction de votre type anonyme, ce qui vous permettra de spécifier un nom pour le type. Bien sûr, il est beaucoup plus facile de simplement déclarer une classe comme presque tout le monde le suggère, mais la méthode TypeBuilder est beaucoup plus excitante. ;)

TypeBuilder

24
Mia Clarke

La réponse en Java World serait un classe locale (défini dans une méthode), qui sont absents en C #.

8
Damian

Oui, vous créez un classe anonyme, si vous voulez que votre classe ait un nom, c'est-à-dire pas anonyme, alors déclarez une classe ou une structure régulière.

4
jcopenha

Puisqu'il est anonyme, vous ne pouvez pas le nommer. Si vous avez besoin de connaître le nom d'un type, vous devez vraiment créer une classe.

4
Luis Abreu

Non, il n'y a aucun moyen de donner un nom de type significatif à ces classes telles que vous les avez déclarées. Les types anonymes ne sont que cela, anonymes. Il n'y a aucun moyen de "nommer" explicitement le type dans le code sans recourir à des hacks très laids.

Si vous devez vraiment donner un nom au type, vous devrez déclarer explicitement et utiliser un nouveau type avec les propriétés dont vous avez besoin.

4
JaredPar

Je pense que, par définition, les types anonymes ne peuvent pas avoir de nom, juste celui que le compilateur lui donne. Si vous recherchez des informations plus significatives au moment de la conception sur les types anonymes, vous attendez trop du compilateur.

2
Mark Carpenter