2009-06-05 27 views
31

Olası Çoğalt: C# '
What is the difference between the following casts in c#?C# döküm arasındaki fark?

, bir nesne döküm veya as anahtar kelimeyi kullanarak arasındaki orada fark nedir? Umarım bu kod ... ne demek istediğimi

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

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

Teşekkür

:)

+0

Tam dupe: // stackoverflow. com/questions/702234/what-is-the-c-in-the-c-cast-in-the-c-ve diğerleri çok sayıda diğerleri – annakata

+0

http://stackoverflow.com/questions/2483/casting-newtype-vs- object-as-newtype – pirho

cevap

65

as bir InvalidCastException atmak asla gösterilecektir. Bunun yerine, döküm başarısız olursa null değerini döndürür (örneğinizde string örneğiniz varsa NullReferenceException verir).

+0

Onun örneği NullReferenceException vermez. – Blindy

+2

@Blindy - evet öyle olurdu. Potansiyel olarak boş bir nesne olabilecek bir ToUpper() yapmaya çalışıyor. – rein

+0

Teşekkürler, sadece kestirme olabilir diye düşündüm! –

4

'as' kullanmak, Object bir String değilse, bir istisna atar. Bunun yerine boş dönecektir. Bu null değerine hemen başvurduğunuz için durumunuzda hala bir istisna atarsınız.

7

Bildiğim kadarıyla!

"As" ifadesinin kullanılması, döküm başarısız olursa, dökümün bir istisna atacağı yerde "yayınlama" başarısız olursa, null değerini döndürür. Daha önce bahsedildiği oluyor InvalidCastException dışında

14

... (Bu null değilse) hedef tür bir değer türü ise

as

çalışmaz: http

obj as int // compile time error.