используя отражение, чтобы получить имя параметра - PullRequest
1 голос
/ 17 декабря 2010

У меня есть приложение c # .net 2.0CF, в котором я хотел бы получить не только тип и значение параметра, передаваемого в функцию, но и имя переменной.

Например:

void Show<PARAM>(PARAM p)
{
    Debug.WriteLine(string.Format("{0} {1} = {2}", typeof(PARAM).ToString, ???, p.ToString() );
}

bool foo = true;
Show(foo);

выдаст "bool foo = true";

В C ++ я могу сделать это с помощью макропроцессора ##.

Если это невозможно сделать в 2.0, можно ли это сделать в 3.5 или 4.0?

Спасибо, PaulH

Ответы [ 4 ]

1 голос
/ 17 декабря 2010

Если я правильно помню, это невозможно с отражением, поскольку имена переменных отсутствуют в сборках, а p - это имя переменной.

0 голосов
/ 20 декабря 2010

Попробуйте использовать PostSharp, у него есть поддержка Compact Framework.

0 голосов
/ 20 декабря 2010
public void Show(int value)
    {
        ParameterInfo[] info = MethodInfo.GetCurrentMethod().GetParameters();
        Trace.WriteLine(string.Format("{0} {1}={2}", info[0].ParameterType.ToString(), info[0].Name, value.ToString()));
    }

выход

Значение System.Int32 = 10

0 голосов
/ 17 декабря 2010
using System.Reflection;


ParameterInfo[] info = MethodInfo.GetCurrentMethod().GetParameters();
System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(false);
System.Diagnostics.StackFrame[] frames = trace.GetFrames();

Я думаю, что значение может быть получено из кадров стека.

Имя параметра можно найти в

ParameterInfo [] info = MethodInfo.GetCurrentMethod (). GetParameters ();

...