C#: Как узнать имя переменной?
понедельник, 15 марта 2010,
Bobasoft
Сегодня задался вопросом, как программно можно узнать имя переменной...
Как раз в этот момент я копался в движке Kigg и нашел вариант с использованием выражений.... немного поиска в гугле и Stackowerflow предложил еще второе решение, с использованием анонимных типов...
class Program { static void Main(string[] args) { int someVar = 0; Stopwatch sw = new Stopwatch(); int j = 0; while (j++ < 4) { Console.WriteLine("#{0}:", j); int i = 0; sw.Reset(); sw.Start(); while (i++ < 1000000) GetVariableName(() => someVar); sw.Stop(); Console.WriteLine("Using expression approach took: {0} millisecond(s)", sw.ElapsedMilliseconds); i = 0; sw.Reset(); sw.Start(); while (i++ < 1000000) GetVariableName(new { someVar }); sw.Stop(); Console.WriteLine("Using anonymous type approach took: {0} millisecond(s)", sw.ElapsedMilliseconds); } Console.WriteLine(); Console.WriteLine("Variable name is '{0}'", GetVariableName(() => someVar)); Console.WriteLine("Variable name is '{0}'", GetVariableName(new { someVar })); Console.ReadLine(); } static string GetVariableName<T>(Expression<Func<T>> expr) // Using expression { return ((MemberExpression)expr.Body).Member.Name; } static string GetVariableName<T>(T variable) // using anonymous type { return typeof(T).GetProperties()[0].Name; } }
Также сделал тест на производительность, из которого видно что по скорости НАМНОГО опережает вариант с использованием анонимных типов - 0.3 секунды против 4.. (на моем компе)..
WBR,
Bobasoft