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


Ищите нас в интернетах!

Комментарии

Свежие вакансии