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


per leggere il post originale o inviare un commento visita il seguente indirizzo: ASP.NET 2.0: Un finder un po' generico...