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

Comment puis-je accéder aux objets de type anonyme C# en dehors de leur portée ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-04 18:48:39395parcourir

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

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!

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