Ответ 1
as
никогда не будет бросать InvalidCastException
. Вместо этого он возвращает null, если сбрасывается (что даст вам NullReferenceException
, если obj
в вашем примере не был string
).
Возможный дубликат:
В чем разница между следующими нажатиями в С#?
В С# существует ли разница между литьем объекта или использованием ключевого слова as
? Надеюсь, этот код покажет, что я имею в виду...
String text = "Hello hello";
Object obj = text;
String originalCast = ((String)obj).ToUpper();
String originalAs = (obj as String).ToUpper();
Спасибо
:)
as
никогда не будет бросать InvalidCastException
. Вместо этого он возвращает null, если сбрасывается (что даст вам NullReferenceException
, если obj
в вашем примере не был string
).
За исключением InvalidCastException
, который уже упоминался...
as
не будет работать, если целевым типом является тип значения (если он не допускает значения null):
obj as int // compile time error.
Насколько я знаю!
Использование 'as' будет возвращать значение null, если "cast" не выполняется, когда кастинг будет генерировать исключение, если сбрасывание происходит неудачно.
Использование 'as' не будет генерировать исключение, если obj не является String. Вместо этого он вернет значение null. Что в вашем случае все равно вызовет исключение, так как вы сразу ссылаетесь на это нулевое значение.