C# 코드를 컴파일하고 나면 더 이상 변수 이름을 갖지 않습니다. 이를 수행하는 유일한 방법은 변수를 클로저로 승격시키는 것입니다. 그러나 함수에 새 변수 이름을 출력하기 때문에 수행중인 함수에서 변수를 호출 할 수 없습니다. 이것은 작동합니다 :
는
using System;
using System.Linq.Expressions;
public class Program
{
public static void Main()
{
string myString = "My Hello string variable";
// Prints "myString : My Hello String Variable
Console.WriteLine("{0} : {1}", GetVariableName(() => myString), myString);
}
public static string GetVariableName<T>(Expression<Func<T>> expr)
{
var body = (MemberExpression)expr.Body;
return body.Member.Name;
}
}
하지만 이것은 작동하지 않을 것입니다 :
완전히 불가능
using System;
using System.Linq.Expressions;
public class Program
{
public static void Main()
{
string myString = "test";
// This will print "myVar : test"
Method(myString);
}
public static void Method(string myVar)
{
Console.WriteLine("{0} : {1}", GetVariableName(() => myVar), myVar);
}
public static string GetVariableName<T>(Expression<Func<T>> expr)
{
var body = (MemberExpression)expr.Body;
return body.Member.Name;
}
}
. callsite를 변경하여 표현 트리를 남용 할 수 있습니다. – SLaks