as
не может быть использован с типами значений (не обнуляемых типов).
Для ссылочных типов ...
expression as type
действительно так же, как
expression is type ? (type) expression : (type) null
за исключением того, expression
вычисляется только один раз.
В знак уважения к Биллу Клинтону, по выражению 'is' в 'expression is type', я имею в виду 'is'.
В основном, как указывают другие ответы, это означает, что при возврате null, когда приведение произойдет неудачно. Тем не менее, он также возвращает null, когда кастинг будет успешным, но тип неправильный.
Вот несколько глупый пример:
uint? u = 52;
int? i = (int?) u; // 'i' is now 52
но
uint? u = 52;
object d = u;
int? i = d as int?;
Что такое значение I? 52? Неа. Он равен нулю.
Зачем нужен объект? Оказывается, я солгал выше, когда объяснял «как» в терминах «есть».
Наблюдайте:
uint? u = 52;
int? i = (u is int?) ? (int?) u : (int?) null;
'я' теперь null
uint? u = 52;
int? i = u as int?;
К сожалению. Ошибка компилятора. Итак, я думаю, что два утверждения не совсем одинаковы.
Вкратце: есть есть и как есть, как есть. –
Не только это, но я должен написать C#, который использует '?' например, Lisp использует скобки. :-) – Justin