Подтвердить что ты не робот

С# разница между литьем и как?

Возможный дубликат:
В чем разница между следующими нажатиями в С#?

В С# существует ли разница между литьем объекта или использованием ключевого слова as? Надеюсь, этот код покажет, что я имею в виду...

String text = "Hello hello";
Object obj = text; 

String originalCast = ((String)obj).ToUpper();
String originalAs = (obj as String).ToUpper();

Спасибо

:)

4b9b3361

Ответ 1

as никогда не будет бросать InvalidCastException. Вместо этого он возвращает null, если сбрасывается (что даст вам NullReferenceException, если obj в вашем примере не был string).

Ответ 2

За исключением InvalidCastException, который уже упоминался...

as не будет работать, если целевым типом является тип значения (если он не допускает значения null):

obj as int // compile time error.

Ответ 3

Насколько я знаю!

Использование 'as' будет возвращать значение null, если "cast" не выполняется, когда кастинг будет генерировать исключение, если сбрасывание происходит неудачно.

Ответ 4

Использование 'as' не будет генерировать исключение, если obj не является String. Вместо этого он вернет значение null. Что в вашем случае все равно вызовет исключение, так как вы сразу ссылаетесь на это нулевое значение.