Accéder aux objets de type anonymes au-delà de leur portée en C#
Accéder aux membres de type anonymes en dehors de leur portée déclarée peut poser un défi en C#, en particulier lorsque tenter de transférer des données entre les méthodes. Considérez le code suivant :
void FuncB() { var obj = FuncA(); Console.WriteLine(obj.Name); } FuncA() { var a = (from e in DB.Entities where e.Id == 1 select new {Id = e.Id, Name = e.Name}).FirstOrDefault(); return a; }
Malheureusement, ce code entraînera une erreur car obj n'est plus accessible en dehors de FuncA().
Une approche prudente
Il est généralement recommandé d'éviter d'accéder aux objets de type anonyme au-delà de leur portée. Cette pratique peut conduire à un code confus et à des erreurs potentielles. Cependant, si l'accès à des objets de type anonyme en dehors de leur portée est absolument nécessaire, il existe une solution de contournement connue sous le nom de "cast by example". La technique implique l'utilisation de la méthode CastByExample pour convertir un objet de type anonyme en un type souhaité. Voici un exemple :
En fournissant un exemple d'objet, CastByExample() peut déduire le type correct et convertir l'objet cible en ce type.
Attention
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; }
Bien que la technique de diffusion par exemple puisse être utile, elle doit être utilisée avec prudence. Cette pratique peut entraîner des erreurs de conversion si l'objet cible ne correspond pas à l'exemple fourni. Il est toujours conseillé d'envisager des approches alternatives pour accéder aux objets de type anonyme en dehors de leur portée.
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!