Non è possibile fare questo con la riflessione, perché le variabili non avranno un nome, una volta compilato a IL. Tuttavia, è possibile utilizzare alberi di espressione e di promuovere la variabile ad una chiusura:
static string GetVariableName<T>(Expression<Func<T>> expr)
{
var body = (MemberExpression)expr.Body;
return body.Member.Name;
}
È possibile utilizzare questo metodo come segue:
static void Main()
{
var someVar = 3;
Console.Write(GetVariableName(() => someVar));
}
Si noti che questo è abbastanza lento, quindi non lo uso in percorsi di prestazioni critici della vostra applicazione. Ogni volta che questo codice viene eseguito, vengono creati diversi oggetti (che causa la pressione GC) e sotto la copertura molti metodi non inlinable sono chiamati e qualche riflessione pesante viene utilizzato.
Per un esempio più completo, vedere here.
UPDATE
Con C# 6.0, la parola chiave nameof
si aggiunge al linguaggio, che ci permette di effettuare le seguenti operazioni:
static void Main()
{
var someVar = 3;
Console.Write(nameof(someVar));
}
Questo è ovviamente molto più conveniente e ha lo stesso costo ha definito la stringa come costante stringa letterale.
@helen la mia domanda è abbastanza semplice, in contrasto con la dispersione di una domanda che si avvicinò con, che ancora penso piuttosto diversa. –
Quale potrebbe essere il ragionamento dietro questo? – Dested