Il n'est pas possible de faire cela avec la réflexion, car les variables n'auront pas de nom une fois compilées en IL. Cependant, vous pouvez utiliser des arbres d'expression et de promouvoir la variable à une fermeture:
static string GetVariableName<T>(Expression<Func<T>> expr)
{
var body = (MemberExpression)expr.Body;
return body.Member.Name;
}
Vous pouvez utiliser cette méthode comme suit:
static void Main()
{
var someVar = 3;
Console.Write(GetVariableName(() => someVar));
}
Notez que cela est assez lent, il ne faut pas l'utiliser dans les chemins critiques de performance de votre application. Chaque fois que ce code s'exécute, plusieurs objets sont créés (ce qui provoque une pression GC) et sous la couverture de nombreuses méthodes non-inlinables sont appelées et une forte réflexion est utilisée.
Pour un exemple plus complet, voir here.
MISE À JOUR
Avec C# 6.0, le mot-clé nameof
est ajouté à la langue, ce qui nous permet de faire ce qui suit:
static void Main()
{
var someVar = 3;
Console.Write(nameof(someVar));
}
Ceci est évidemment beaucoup plus pratique et a le même coût a la définition de la chaîne comme chaîne littérale constante.
@helen Ma question est assez simple, par opposition à la dispersion d'une question qu'il a soulevée, ce qui me semble plutôt différent. –
Quel pourrait être le raisonnement derrière cela? – Dested