Durante la lettura di codice C# Ho trovato un piuttosto curioso frammento:Che senso ha usare "is" seguito da "as" anziché "as" seguito da un controllo nullo in C#?
if(whatever is IDisposable) {
(whatever as IDisposable).Dispose();
}
Preferirei aspetto che viene fatto sia in questo modo:
if(whatever is IDisposable) { //check
((IDisposable)whatever).Dispose(); //cast - won't fail
}
o come questo:
IDisposable whateverDisposable = whatever as IDisposable;
if(whateverDisposable != null) {
whateverDisposable.Dispose();
}
Voglio dire as
è come un cast, ma restituisce null
in caso di fallimento. Nel secondo frammento non può fallire (poiché c'è un controllo is
prima).
Qual è lo scopo di scrivere il codice come nel primo frammento anziché come nel secondo o nel terzo?
Immagino che quest'ultimo lasci una variabile nell'ambito, ma lo faccio sempre comunque. Penso di aver letto recentemente un commento di Jon Skeet che preferisce anche l'ultimo caso. Anche se sarei sorpreso se non ottimizzassero tutti allo stesso modo. – Rup
La terza opzione è la mia preferita, dato che hai solo un 'as' /' is' e un controllo nullo - sembra meno lavoro/meno sovraccarico di avere un 'is' prima e un' as' successivo ... –
Ho visto l'ultimo esempio in un libro, mi sembra anche più logico. – atoMerz