Подтвердить что ты не робот

Использование nameof для получения имени текущего метода

Просматривал, искал и надеялся, но не мог найти прямой ответ.

Есть ли в С# 6.0, чтобы получить текущее имя метода с помощью nameof с указанием имени метода?

Я добавляю свои результаты тестов в словарь следующим образом:

Results.Add(nameof(Process_AddingTwoConsents_ThreeExpectedRowsAreWrittenToStream), result);

Я бы предпочел, чтобы мне не пришлось явно указывать имя метода, чтобы я мог скопировать + вставить строку, нерабочий пример:

Results.Add(nameof(this.GetExecutingMethod()), result);

Если возможно, я не хочу использовать Reflection.

UPDATE

Это не (как было предложено) дубликат этого вопроса. Я спрашиваю, возможно ли явно использовать nameof без (!) Отражения, чтобы получить имя текущего метода.

4b9b3361

Ответ 1

Вы не можете использовать nameof для достижения этого, но как об этом обходном пути:

Нижеследующее не использует прямого отражения (точно так же, как nameof) и не имеет явного имени метода.

Results.Add(GetCaller(), result);

public static string GetCaller([CallerMemberName] string caller = null)
{
    return caller;
}

GetCaller возвращает имя любого метода, который вызывает его.

Ответ 2

Если вы хотите добавить имя текущего метода в список результатов, вы можете использовать это:

StackTrace sTrace= new StackTrace();
StackFrame sFrame= sTrace.GetFrame(0);
MethodBase currentMethodName = sFrame.GetMethod();
Results.Add(currentMethodName.Name, result);

Или вы можете использовать

Results.Add(new StackTrace().GetFrame(0).GetMethod().Name, result);