Maison > développement back-end > C++ > Comment puis-je récupérer dynamiquement les noms de variables en C# ?

Comment puis-je récupérer dynamiquement les noms de variables en C# ?

Patricia Arquette
Libérer: 2024-12-31 04:10:14
original
135 Les gens l'ont consulté

How Can I Retrieve Variable Names Dynamically in C#?

Récupération dynamique des noms de variables : exploration d'alternatives avec Reflection et C# 6.0 nameof

Obtention du nom d'une variable une fois qu'elle a été compilée en Intermédiaire Le langage (IL) est un défi courant en programmation. Dans cet article, nous verrons comment résoudre ce problème en utilisant la réflexion, une fonctionnalité puissante de .NET qui nous permet d'inspecter les métadonnées sur les types et les membres au moment de l'exécution.

Les limites de la réflexion

Dans un premier temps, nous pourrions envisager de tirer parti de la réflexion pour récupérer les noms de variables. Cependant, il est crucial de noter que les variables ne conservent pas leur nom dans IL après compilation. Par conséquent, s'appuyer uniquement sur la réflexion ne donnera pas le résultat souhaité.

Entrez les arbres d'expression et les fermetures : une solution de contournement

Malgré les limites de la réflexion, il existe un solution de contournement ingénieuse. En employant des arbres d'expression, nous pouvons promouvoir une variable en fermeture. Cette technique capture essentiellement le contexte de la variable au moment de la compilation, nous permettant d'accéder à son nom ultérieurement à l'aide de la méthode GetVariableName méthode.

Implémentation et utilisation

Voici un exemple illustrant cette approche :

static string GetVariableName<T>(Expression<Func<T>> expr)
{
    var body = (MemberExpression)expr.Body;
    return body.Member.Name;
}

static void Main()
{
    var someVar = 3;
    Console.Write(GetVariableName(() => someVar));
}
Copier après la connexion

Cette méthode fonctionne en extrayant l'instance MemberExpression du corps de l'expression lambda fournie. La propriété Member de MemberExpression contient alors le nom de la variable.

Inconvénients et considérations en matière de performances

Bien que cette solution de contournement contourne les limitations de la réflexion, elle présente des inconvénients en termes de performances. La création de plusieurs objets, des appels de méthodes non inlinables excessifs et une utilisation intensive de la réflexion peuvent introduire de la latence. Il est donc recommandé d'éviter d'utiliser cette approche dans les chemins de code critiques en termes de performances.

Nom du mot clé de C# 6.0 : Une solution plus simple

Avec l'avènement de C# 6.0 , une solution beaucoup plus simple a émergé : le nom du mot-clé. Ce mot-clé fournit un moyen concis et pratique d'accéder au nom d'une variable, d'une propriété ou d'une méthode au moment de la compilation.

Dans notre exemple d'origine, nous pouvons désormais récupérer sans effort le nom de la variable en utilisant nameof, comme indiqué ci-dessous :

static void Main()
{
    var someVar = 3;
    Console.Write(nameof(someVar));
}
Copier après la connexion

Le mot-clé nameof offre les mêmes fonctionnalités que la méthode GetVariableName mais avec des fonctionnalités améliorées. performances.

Conclusion

La récupération des noms de variables dans .NET nécessite un examen attentif. Bien que les arbres de réflexion et d'expression fournissent une solution de contournement pour obtenir des noms de variables au moment de l'exécution, leur impact sur les performances doit être pris en compte. En revanche, le mot-clé nameof de C# 6.0 élimine ces problèmes de performances et constitue une solution plus efficace pour cette tâche.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal