Accès aux propriétés des objets de type anonyme au-delà de leur portée
Lorsque vous travaillez avec des types anonymes en C#, vous pouvez rencontrer des situations dans lesquelles vous devez accéder à leurs propriétés hors du périmètre où elles ont été déclarées. Cela peut poser un défi en raison de la nature des types anonymes.
Pour accéder aux propriétés d'un type anonyme défini dans une fonction imbriquée comme FuncB(), vous pouvez utiliser une technique connue sous le nom de « conversion par exemple ». Cette approche utilise la réflexion pour identifier le type de votre objet anonyme, puis le convertit en un type compatible.
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 consiste à créer un exemple d'objet avec les mêmes propriétés que votre objet anonyme. tapez (exemple dans l'extrait de code), puis utilisez la réflexion pour déterminer le type de l'objet. Enfin, vous convertissez l'objet d'origine (cible) en type d'objet exemple, ce qui vous donne accès à ses propriétés.
Avertissement :
Bien qu'il soit techniquement possible de accéder à des objets de type anonyme en dehors de leur portée en utilisant ce hack "cast by example", cela n'est généralement pas recommandé. Les types anonymes sont conçus pour être utilisés dans leur propre portée, et prolonger leur durée de vie au-delà peut entraîner un comportement inattendu et des bogues potentiels. Il est généralement préférable de renvoyer les données à la fonction appelante ou d'utiliser une autre approche orientée objet pour maintenir l'encapsulation et l'intégrité des données.
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!