Я написал класс интерфейса для Selenium WebDriver, который включает обработчик исключений, который записывает некоторую диагностическую информацию, прежде чем реорганизовывать исключение. Было бы легче диагностировать проблему позже, если бы у меня было имя метода, инициировавшего операцию Selenium. Как получить имя метода, который сделал первый вызов в моем классе интерфейса?Как получить имя вызывающего метода из другого класса
ответ
Самый ценный вариант, если вы используете VS 2012, чтобы использовать CallerMemberNameAttribute. Это вызовет компилятор , чтобы заполнить имя метода во время компиляции, так как не имеет накладных расходов.
Вы должны были бы добавить это к вашим вызовам методов, однако:
void YourMethod(string yourFirstArg, [CallerMemberName] string callingMethodName = "")
{
//..
Обратите внимание, что вы можете также использовать StackTrace
и StackFrame
, но они имеют совсем немного дополнительные накладные расходы.
Возможно, мой вопрос был немного неясным. Вызывающий метод может быть из моего класса интерфейса. Если это так, то это решение не работает. –
@ carlin.scott Интерфейс никогда не может вызвать метод ...? –
Ну, я думаю, это все равно будет работать, но все другие методы должны пройти по аргументу callMethodName, но затем я задал бы вопрос: лучше ли делать простые изменения во многих местах или вносить сложные изменения в одном месте и как важно несколько сотен миллисекунд, когда пришло время собирать информацию об отказах. –
Используя объект System.Diagnostics, вы можете получить трассировку стека, а затем используя linq вы можете найти последний добавленный фрейм, который не был объявлен в текущем классе. Имейте в виду, что компилятор JIT может встроить некоторые методы в стек во время оптимизации кода, что сделало бы это менее полезным.
new System.Diagnostics.StackTrace(1, false).GetFrames().First(f => f.GetMethod().DeclaringType != System.Reflection.MethodBase.GetCurrentMethod().DeclaringType).GetMethod().Name
- 1. Получить имя параметра из вызывающего метода
- 2. Получить имя метода вызывающего абонента
- 3. Получить имя метода вызывающего абонента
- 4. Получить имя метода вызывающего объекта моего метода
- 5. Вызов метода из другого класса в цикл внутри вызывающего класса
- 6. Как получить имя метода вызывающего абонента
- 7. PHP: Получить имя класса статического метода, вызывающего другой статический класс
- 8. Получить имя класса из метода
- 9. Как получить имя вызывающего класса в Java?
- 10. Как получить имя вызывающего класса (в PHP)
- 11. Как получить имя вызывающего абонента класса?
- 12. Как получить имя вызывающего класса внутри функции
- 13. получить имя класса вызывающего абонента от унаследованного статического метода
- 14. Swift - Делегировать вызов вызывающего метода из другого класса
- 15. рубин - получить имя класса из метода класса
- 16. Как узнать имя вызывающего класса?
- 17. Как получить имя и тип вызывающего метода с помощью отражения?
- 18. Можно ли получить имя класса, вызывающего метод?
- 19. Вывод типа класса из статического метода/вызывающего?
- 20. Невозможно получить значение из другого метода класса
- 21. Как получить имя метода из известного метода?
- 22. Как получить имя метода класса/экземпляра JavaScript из метода?
- 23. Получить экземпляр класса вызывающего абонента из другого объекта
- 24. как получить имя класса из статического метода класса путем осмотра
- 25. Получить имя вызывающего предиката
- 26. Получить имя класса Ruby без метода класса
- 27. Как получить имя родительского метода/имя класса/файла внутри другого вызова метода?
- 28. Получить номер строки вызывающего метода?
- 29. как получить имя вызывающего метода и LINENUMBER в Android
- 30. Python: Как получить имя метода вызывающего в вызываемом методе?
При отправке вопроса внизу появляется флажок, который позволяет включить ответ с сообщением. Это объясняет, почему кто-то тоже это сделает. –
@tnw, пожалуйста, удалите ваши downvotes на мой вопрос и ответ. Это не конструктивная обратная связь. –