Ciao, vi chiedo un parere sul metodo più elegante di utilizzare una variabile globale sulla quale opera una funzione ricorsiva.
1. Ho un metodo che ritorna un DataSet contenente una tabella letta dal DB. Su questa tabella eseguo una funzione ricorsiva.
In questo caso alla funzione ricorsiva passo come parametri: a. l'intero DataTable
b. una DataRow da analizzare
c. un contatore che si incrementa ad ogni chiamata ricorsiva.
public DataSet GetStructurefromD

)
{
.....
.....
foreach (DataRow dr in dt.Rows)
{
depth = RecursiveGetHierarchicalDepth(dt, dr, 0).ToString(); }
......
......
}
protected int RecursiveGetHierarchicalDepth(DataTable dt, DataRow dr, int depth)
{
depth++;
.....
.....
DataRow[] parentRow = dt.Select(expression);
depth = RecursiveSetHierarchicalDepth(dt, parentRow[0], depth);
return (depth);
}
Mi sembra poco elegante ripassare alla funzione ogni volta l'intero DataTable. Una soluzione alternativa può essere definire quest'ultimo come variabile globale static.
Tra le due qual'è la soluzione migliore? Ne esiste una terza? Tornando alla prima, riguardo l'utilizzo delle risorse, passando ogni volta alla funzione ricorsiva l'intero DataTable, C# come si comporta? Ricrea in memoria una copia esatta del DataTable passato o crea solamente un puntatore all'oggetto passato? Io direi la prima, ma magari mi sbaglio.
A voi esperti di OOP un sano parere!
Grazie 1000
br