Non è che programmi C# tutti i giorni quindi non mi ritengo un esperto, ma a volte ci sono delle cose che proprio non riesco a capire, non nel senso che non ci arrivo, nel senso che proprio non condivido alcune scelte di comportamento della logica del codice...

Ad esempio, mi trovo di fronte a questo problema, per rendere il mio codice quanto mai invulnerabile a errori non gestiti.

Prendiamo le interrogazioni al database, ecco un esempio di query:

codice:
SqlDataReader read;
read=this.cnnp.GetDataReaderFromDataSet(szQuery);
Ci troviamo in una routine, read esiste e vive lì dentro, szQuery è stata istanziata e caricata in precedenza, cnnp è un oggetto connessione di modulo già connesso e pronto.

Fin quì va tutto bene.

Ora però ho creato una funzioncina privata interna alla classe che non esegue la query secca, ma prova ad eseguirla e fa una serie di operazioni, se al termine di queste operazioni riesce effettivamente a fare la query restituisce True, altrimenti False.

codice:
SqlDataReader read;
if(!this.EseguiQuery(ref read,szQuery))
	return false;
EseguiQuery è di tipo bool, ovviamente, il grosso problema è che mi da errore 47 "Utilizzo della variabile locale read non assegnato".

Allora, read così come l'ho chiamata non è ancora istanziata, ok, usando cnnp.GetDataReaderFromDataSet() la istanzio, ok, però dentro EseguiQuery ad un certo punto io cnnp.GetDataReaderFromDataSet() lo chiamo e tutti dovrebbero vivere felici e contenti.

Invece lui pretende che read al momento della chiamata di EseguiQuery sia già istanziata, ma visto che read non ha costruttori l'unico modo per istanziarla è richiamare cnnp.GetDataReaderFromDataSet() direttamente, ma questo mi espone a errori che ho gestito dentro EseguiQuery.

In poche parole, devo istanziare read, ma non posso farlo se prima non eseguo una query, bello vero?