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?
public class Employee {}
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.
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" };
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" };
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. ;)
La réponse en Java World serait un classe locale (défini dans une méthode), qui sont absents en C #.
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.
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.
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.
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.