Использование nameof для получения имени текущего метода
Просматривал, искал и надеялся, но не мог найти прямой ответ.
Есть ли в С# 6.0, чтобы получить текущее имя метода с помощью nameof
с указанием имени метода?
Я добавляю свои результаты тестов в словарь следующим образом:
Results.Add(nameof(Process_AddingTwoConsents_ThreeExpectedRowsAreWrittenToStream), result);
Я бы предпочел, чтобы мне не пришлось явно указывать имя метода, чтобы я мог скопировать + вставить строку, нерабочий пример:
Results.Add(nameof(this.GetExecutingMethod()), result);
Если возможно, я не хочу использовать Reflection.
UPDATE
Это не (как было предложено) дубликат этого вопроса. Я спрашиваю, возможно ли явно использовать nameof
без (!) Отражения, чтобы получить имя текущего метода.
Ответы
Ответ 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);