Можете ли вы использовать отражение, чтобы найти имя выполняемого в данный момент метода? - PullRequest
194 голосов
/ 04 сентября 2008

Как гласит заголовок: Может ли рефлексия дать вам имя выполняемого в данный момент метода.

Я склонен не догадываться из-за проблемы Гейзенберга. Как вы вызываете метод, который сообщит вам текущий метод, не меняя его? Но я надеюсь, что кто-то может доказать, что я ошибаюсь там.

Обновление:

  • Часть 2. Может ли это быть использовано для поиска в коде свойства?
  • Часть 3: Каким будет представление?

Окончательный результат
Я узнал о MethodBase.GetCurrentMethod (). Я также узнал, что я могу не только создавать трассировку стека, но и создавать только тот кадр, который мне нужен, если я хочу.

Чтобы использовать это внутри свойства, просто используйте .Substring (4), чтобы удалить 'set_' или 'get _'.

Ответы [ 13 ]

0 голосов
/ 09 августа 2017

Я только что сделал это с помощью простого статического класса:

using System.Runtime.CompilerServices;
.
.
.
    public static class MyMethodName
        {
            public static string Show([CallerMemberName] string name = "")
            {
                return name;
            }
        }

тогда в вашем коде:

private void button1_Click(object sender, EventArgs e)
        {
            textBox1.Text = MyMethodName.Show();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            textBox1.Text = MyMethodName.Show();
        }
0 голосов
/ 29 декабря 2015

Попробуйте это ...

    /// <summary>
    /// Return the full name of method
    /// </summary>
    /// <param name="obj">Class that calls this method (use Report(this))</param>
    /// <returns></returns>
    public string Report(object obj)
    {
        var reflectedType = new StackTrace().GetFrame(1).GetMethod().ReflectedType;
        if (reflectedType == null) return null;

        var i = reflectedType.FullName;
        var ii = new StackTrace().GetFrame(1).GetMethod().Name;

        return string.Concat(i, ".", ii);
    }
0 голосов
/ 02 октября 2012

Если вам нужно только строковое имя метода, вы можете использовать выражения. Смотри http://joelabrahamsson.com/entry/getting-property-and-method-names-using-static-reflection-in-c-sharp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...