Non c'è dubbio che l'introduzione di dynamic sia stata una delle operazioni più controverse di sempre all'interno di .NET. Questa funzionalità ha visto molte persone a favore e altrettante a sfavore. Personalmente non sono un fan di dynamic e quindi non lo uso mai, ma ci sono molti progetti che usano Dapper che fanno forte uso di dynamics visto che Dapper permette di farne facilmente uso.
Tuttavia, questo ha portato alcuni sviluppatori a usare dynamic anche al di fuori di Dapper e quindi a dichiarare per esempio variabili come dynamic. Questo è un esempio di una cosa che non andrebbe mai fatta per non creare problemi anche in punti inaspettati. prendiamo come esempio il seguente codice.
dynamic myvar = 0; int val = MyMethod(myvar); int MyMethod(int n) => n;
In questo esempio tutto funziona tranquillamente. Anche se dichiarato come dynamic, myvar è impostato come un numero quindi a runtime il typechecking va a buoin fine quando viene myvar viene passato a MyMethod. Supponiamo però di cambiare MyMethod Nel seguente modo.
dynamic myvar = 0; int val = MyMethod(myvar); string MyMethod(int n) => n.ToString();
In questo esempio, il compilatore non solleva eccezioni, ma otteniamo un errore a runtime perchè MyMethod torna una stringa, mentre il chiamante si aspetta un intero. Il compilatore non si accorge della discrepanza in quando il fatto di dichiarare myvar come dynamic disabilita automaticamente ogni controllo del compilatore su quella riga di codice lasciando così campo libero a possibili eccezioni a runtime. Dichiarando myvar come int, questo problema viene eliminato e otteniamo l'errore direttamente in fase di compilazione rendendo così il nostro codice molto più stabile.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.


