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
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)); }
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)); }
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!