Maison >développement back-end >C++ >Comment puis-je accéder aux objets de type anonyme C# en dehors de leur portée ?
Accès aux objets de type anonyme C# en dehors de leur portée
En C#, les types anonymes sont créés à l'aide du mot-clé new suivi d'un ensemble d'initialiseurs de propriété entre accolades. Ils sont utiles lorsque vous devez créer un objet temporaire qui n'a pas besoin d'être nommé ou défini davantage. Cependant, accéder aux objets de type anonyme en dehors de la portée où ils sont déclarés peut être difficile.
Pour comprendre le problème, considérons le code suivant :
void FuncB() { var obj = FuncA(); Console.WriteLine(obj.Name); } object FuncA() { var a = (from e in DB.Entities where e.Id == 1 select new { Id = e.Id, Name = e.Name }).FirstOrDefault(); return a; }
Dans ce code, FuncA() renvoie un type anonyme avec deux propriétés : Id et Name. Cependant, lorsque FuncB() tente d'accéder à la propriété Name, il rencontrera une erreur car le compilateur ne peut pas déterminer les propriétés du type anonyme renvoyé par FuncA().
Une solution potentielle consiste à utiliser "cast by example":
public void FuncB() { var example = new { Id = 0, Name = string.Empty }; var obj = CastByExample(FuncA(), example); Console.WriteLine(obj.Name); } private object FuncA() { var a = from e in DB.Entities where e.Id == 1 select new { Id = e.Id, Name = e.Name }; return a.FirstOrDefault(); } private T CastByExample<T>(object target, T example) { return (T)target; }
Cette technique de « conversion par exemple » consiste à créer un exemple d'objet du type anonyme souhaité, puis à convertir l'objet renvoyé en type d'exemple. Bien qu'il permette d'accéder aux propriétés de type anonyme, il n'est généralement pas recommandé car il peut prêter à confusion et être sujet aux erreurs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!