Я не думаю, что это теоретически возможно. Подумайте об этом сценарии:
MyClass a, b;
a = new MyClass();
b = a;
Console.WriteLine("name of b is " + SomeMagicClass.GetVarName(b));
//Should it be "b" or "a"?
Я уверен, что есть лучшее объяснение с участием сгенерированного кода MIDL вдоль линий имени переменного даже не присутствующий во время выполнения.
EDIT Увы, я был неправ. Вдохновленный Джоном Скитом post об обработке обработки исключений Null Reference и внезапно напоминающем о проецировании, есть способ сделать это.
Вот полный рабочий codez:
public static class ObjectExtensions {
public static string GetVariableName<T>(this T obj) {
System.Reflection.PropertyInfo[] objGetTypeGetProperties = obj.GetType().GetProperties();
if(objGetTypeGetProperties.Length == 1)
return objGetTypeGetProperties[0].Name;
else
throw new ArgumentException("object must contain one property");
}
}
class Program {
static void Main(string[] args) {
string strName = "sdsd";
Console.WriteLine(new {strName}.GetVariableName());
int intName = 2343;
Console.WriteLine(new { intName }.GetVariableName());
}
}
дубликата http://stackoverflow.com/questions/729803/print-name-of-the-variable-in-c –
объектов не имеют имен. Переменные имеют имена, а переменные содержат _references_ для объектов. Кроме того, две переменные (возможно, с разными именами) могут ссылаться на один и тот же объект. –
Какой язык вы используете специально? Я пытался воссоздать VB.NET, не повезло ... – Moshe