Ваш код и FindControl
функционально отличаются. Они не делают то же самое.
FindControl
не выполняет глубокий поиск, тогда как ваш код делает. От MSDN :
Этот метод найдет элемент управления, только если элемент управления непосредственно содержится в указанном контейнере; то есть метод не выполняет поиск в иерархии элементов управления внутри элементов управления.
Что лучше? Это зависит. Если вы не знаете, где на странице находится элемент управления, ваши рекурсивные методы могут его найти.
Однако предположим, что на панели имеется два элемента управления (ID = "MyPanel"): пользовательский элемент управления UserControl (ID = "MyControl") и метка (ID = "MyName"). Если вы вызовете `MyPanel.FindControl (" MyName "), вы вернете ожидаемую метку на панели. Если вы используете свою функцию, она сначала будет искать в MyControl метку с ID = "MyName". Из-за этого, если MyControl также содержит метку с ID = "MyName", он будет возвращен. Это может быть неожиданным, если элемент управления генерирует дочерний элемент управления с тем же идентификатором, что и вы.
Что касается производительности , ваш метод выполняет более глубокий поиск, поэтому он может быть гораздо более дорогой операцией.