In un articolo precedente abbiamo spiegato l'utilizzo del costrutto "yield return", oggi vediamo come validare in maniera efficace gli argomenti di un metodo che utilizza al suo interno lo yield return, in particolare mostreremo la strategia che viene utilizzata nell'implementazione di LINQ.

Molti metodi di LINQ hanno un'esecuzione differita: le query non vengono eseguite nel momento in cui sono definite ma piuttosto solo quando il risultato della stessa è necessario ad esempio una foreach.

La validazione dei parametri dei metodi viene però effettuata in maniera immediata, ovvero vengono validati nel momento in cui il metodo LINQ viene chiamato.

Il codice in figura, ad esempio, non lancerà nessuna eccezione anche se la prima azione del codice dovrebbe sollevarne una. Inserendo una foreach sulla variabile r nel codice potremmo effettivamente ottenere l'eccezione ma potenzialmente molte righe sotto al punto in cui abbiamo definito la nostra variabile r.

Posticipare l'eccezione rende più difficile il debug dell'applicazione e quindi va evitato. Per farlo è necessario spezzare in due il metodo in questo modo

Separando in due il metodo e inserendo lo yield return nel metodo chiamato internamente riusciamo a validare immediatamente gli argomenti del metodo e ad ottenere un'esecuzione differita.

 

comments powered by Disqus