as
non può essere utilizzato con tipi valore (tipi non annullabili).
Per i tipi di riferimento ...
expression as type
è davvero lo stesso
expression is type ? (type) expression : (type) null
tranne che expression
viene valutata solo una volta.
In un cenno a Bill Clinton, con "è" in "espressione è di tipo", intendo "is".
Fondamentalmente, come indicano le altre risposte, significa che restituisce null quando il cast fallisce. Tuttavia, restituisce anche null quando il cast avrà successo ma il tipo è sbagliato.
Ecco un esempio un po 'sciocco:
uint? u = 52;
int? i = (int?) u; // 'i' is now 52
ma
uint? u = 52;
object d = u;
int? i = d as int?;
Qual è il valore di i? 52? No. È nullo
Perché l'oggetto lì dentro? Risulta che ho mentito sopra quando ho spiegato "come" in termini di "è".
Rispettare:
uint? u = 52;
int? i = (u is int?) ? (int?) u : (int?) null;
'i' è ora null
uint? u = 52;
int? i = u as int?;
Ops. Errore del compilatore. Quindi, immagino che le due affermazioni non siano esattamente le stesse dopo tutto.
In breve: is is is e as is also is is is. –
Non solo, ma ho potuto scrivere C# che usa '?' come Lisp usa la parentesi. :-) – Justin