2009-06-05 13 views
31

संभव डुप्लिकेट:
What is the difference between the following casts in c#?सी # अंतर?

सी # में, एक वहाँ एक वस्तु कास्टिंग या as कीवर्ड का उपयोग के बीच अंतर है? उम्मीद है कि इस कोड को उदाहरण देकर स्पष्ट करना होगा कि मैं क्या मतलब है ...

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

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

धन्यवाद

:)

+0

http की सटीक शिकार: // stackoverflow। कॉम/प्रश्न/702234/बीच-बीच-अंतर-बीच-बीच-में-सी-और कई अन्य – annakata

+0

http://stackoverflow.com/questions/2483/casting-newtype-vs- का डुप्लिकेट ऑब्जेक्ट-ए-न्यूटाइप – pirho

उत्तर

65

as एक InvalidCastException फेंक कभी नहीं होगा। इसके बजाए, अगर कास्ट विफल हो जाता है तो यह शून्य हो जाता है (जो आपको NullReferenceException देगा यदि obj आपके उदाहरण में string नहीं था)।

+0

उसका उदाहरण NullReferenceException नहीं देगा। – Blindy

+2

@ ब्लिंडी - हाँ यह होगा। वह एक ToUpper() करने की कोशिश कर रहा है जो संभावित रूप से एक शून्य वस्तु हो सकता है। – rein

+0

धन्यवाद, सोचा कि यह सिर्फ शॉर्टेंड हो सकता है! –

4

'as' का उपयोग करना अपवाद नहीं फेंक देगा यदि ओबीजे स्ट्रिंग नहीं है। इसके बजाय यह शून्य वापस आ जाएगा। जो आपके मामले में अभी भी एक अपवाद फेंक देगा क्योंकि आप तुरंत इस शून्य मूल्य का संदर्भ दे रहे हैं।

7

जहाँ तक मुझे पता है!

'as' का उपयोग करके 'कास्ट' विफल हो जाता है, अगर कास्टिंग विफल हो जाती है तो कास्ट विफल होने पर अपवाद फेंक देगा।

14
InvalidCastException कि पहले ही उल्लेख किया है की तुलना में

अन्य ... अगर लक्ष्य प्रकार एक मान प्रकार है (जब तक यह व्यर्थ है)

as काम नहीं करेगा:

obj as int // compile time error. 
संबंधित मुद्दे