Мне было интересно, возможно ли получить метод и имя класса для входной функции метода. Я постараюсь быть более конкретным:
У меня есть класс Form1.cs
, в котором я создал этот метод:
public static void CalculateTime(Action<string> funcToCalc, string where)
{
var watch = System.Diagnostics.Stopwatch.StartNew();
funcToCalc(where);
watch.Stop();
var elapsedMs = watch.ElapsedMilliseconds;
// gets the textbox name
TextBox t = Application.OpenForms["Form1"].Controls["textBox1"] as TextBox;
// writes in the textbox of this form this string
t.AppendText(funcToCalc.Method.Name + " executed in " + elapsedMs + "ms;\n");
}
В этом классе я вызываю этот метод следующим образом:
CalculateTime( Class1.CreateStuff, textPath.Text);
CalculateTime( Class2.CreateStuff, textPath.Text);
Что я хочу сделать, это распечатать что-то вроде
"MyClass1.CreateStuff executed in 100ms"
"MyClass2.CreateStuff executed in 75ms"
и т.д.
Пока мой метод печатает
"CreateStuff executed in 100ms"
"CreateStuff executed in 75ms"
, который не позволяет мне распознать класс вызываемого метода.
Есть ли способ получить имя класса в данном конкретном случае?
Обратите внимание, что если в моем CalculateTime
я звоню
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name;
Я получаю строку "Form1"
.