Maison >développement back-end >C++ >Comment puis-je accéder à des objets de type anonyme en dehors de leur portée déclarée en C# ?

Comment puis-je accéder à des objets de type anonyme en dehors de leur portée déclarée en C# ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-03 13:19:40248parcourir

How Can I Access Anonymous Type Objects Outside Their Declared Scope in C#?

Accès aux objets de type anonymes au-delà de la portée déclarée

En C#, les types anonymes sont générés dynamiquement en fonction des noms de propriétés et des valeurs extraites d'une source. Cependant, la portée de ces objets est limitée au bloc où ils sont déclarés. Cela soulève la question : comment pouvons-nous accéder à des objets de type anonyme en dehors de leur portée déclarée ?

Utilisation de "Cast by Exemple" (prudence conseillée)

Bien que ce soit généralement le cas Non recommandée, une technique dite de "cast by example" permet d'accéder à des objets de type anonyme au-delà de leur portée. Ce hack consiste à créer un objet « exemple » distinct avec les mêmes propriétés que le type anonyme auquel nous voulons accéder.

Implémentation :

  1. Créer le " exemple", en vous assurant qu'il a les mêmes propriétés que le type anonyme.
  2. Convertissez le type anonyme en type d'objet "exemple" en utilisant la méthode CastByExample. Cela renvoie le type anonyme comme type souhaité.
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;
}

Avertissements :

  • Cette technique n'est pas officiellement prise en charge par Microsoft.
  • Cela peut entraîner un comportement inattendu et des erreurs potentielles.
  • Il est fortement déconseillé d'utiliser cette approche en production. code.

En résumé, accéder à des objets de type anonyme au-delà de leur portée en utilisant "cast by example" est possible, mais c'est une pratique risquée qui doit être évitée autant que possible.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn