Ответ 1
Первый ( "прямой" или "C-стиль" ) генерирует исключение, если приведение недействительно. Это также единственный способ выполнить фактическое преобразование типа для объекта. (Обратите внимание, что преобразование типов отличается от кастинга, потому что приведение просто изменяет тип переменной, тогда как преобразование типа дает вам * другой тип объекта.)
Второй (нет имени, хотя вы можете назвать его "try cast", как он вызвал в VB.NET) оценивает null
вместо того, чтобы бросать InvalidCastException
. (Из-за этого поведения он работает только для ссылочных типов).
Отсутствие существенных проблем с производительностью по сравнению друг с другом.
Вы используете as
, только если вы ожидаете, что ваш результат может быть недействительным. В противном случае используйте первый.
Кстати, MSDN может быть полезно для части вашего вопроса:
Оператор
as
подобен операции литья. Однако, если преобразование невозможно, как возвращаетnull
вместо повышения исключения. Рассмотрим следующее выражение:expression as type
Это эквивалентно следующему выражению, за исключением того, что выражение оценивается только один раз.
expression is type ? (type)expression : (type)null
Обратите внимание, что оператор
as
выполняет только преобразования ссылок и преобразования бокса. Операторas
не может выполнять другие преобразования, такие как пользовательские преобразования, которые вместо этого должны выполняться с использованием выражений.