Chi usa ASP.NET conosce il metodo FindControl() che consente di
trovare un controllo all'interno del proprio genitore. Sa sicuramente anche che
questo metodo non è ricorsivo, ma si limita al primo livello e di solito si usa
scrivere un metodo apposito che implementa questa ricorsività. In rete se ne
trovano parecchi esempi ma voglio proporvene uno che ho scritto stamane per
eseguire ricerche mirate ad uno specifico tipo di controlli:
public static T FindControlRecursive<T>(Control root, string id)
where T : Control
{
if (root.ID == id && root is T)
return root as T;
foreach (Control child in root.Controls)
{
T foundControl = FindControlRecursive<T>(child, id);
if (foundControl != null)
return foundControl;
}
return default(T);
}
L'uso di un generics in questo caso consente di specificare il tipo
di controllo da ricercare nella gerarchia, semplificando di molto la stesura del
codice. Se poi avete l'ardire di togliere il constraint allora scoprirete che è
possibile anche cercare un controllo che implementa una determinata
interfaccia...
Lo confesso,
mi sto innamorando. Un amore un po' generics, ma sempre di amore
si tratta...
powered by IMHO
1.3