2010-07-28 28 views
20

कैसे में #TryCast में C# को कैसे परिवर्तित करें?

Dim request As HttpWebRequest = TryCast(WebRequest.Create(address), HttpWebRequest) 

ग vb कोड निम्नलिखित कन्वर्ट करने के लिए मैं इसे सी # में ऑपरेटर के रूप में उपयोग करते हुए, लेकिन इसके काम नहीं कर रहा करने की कोशिश की।

अग्रिम धन्यवाद।

+2

जब आप कहते हैं कि यह काम नहीं कर रहा है तो आपका क्या मतलब है? आपको एक त्रुटि मिल रही है? संकलित नहीं कर सकते? शून्य वापस आता है? क्या आप स्पष्टीकरण दे सकते हैं? – spinon

उत्तर

48

आप as का उपयोग करके कास्ट कर सकते हैं; यह किसी भी अपवाद नहीं होगा, लेकिन null वापसी अगर डाली (बस TryCast) की तरह संभव नहीं है:

HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest; 
+3

यदि आप 'as' कथन के बाद ternary' ?? 'ऑपरेटर का उपयोग करके कास्ट शून्य है तो आप डिफ़ॉल्ट मान प्राप्त कर सकते हैं। – stevehipwell

+5

@ स्टीवो 3000: हाँ, यह भी संभव है (भले ही आप जिस ऑपरेटर का जिक्र कर रहे हैं वह * नल-कोलेसिंग * ऑपरेटर है) –

+2

जो मुझे पहले से जागने से पहले पोस्ट करने के लिए सिखाएगा! – stevehipwell

2

सीधे शब्दों में यह डाली: अगर डाली सफल नहीं होता है

HttpRequest request = (HttpRequest)WebRequest.Create(address); 

यह एक अपवाद फेंक देते हैं।

as ऑपरेटर एक अशक्त वापस आ जाएगी अगर डाली सफल नहीं होता है:

HttpRequest request = WebRequest.Create(address) as HttpRequest; 
// if cast failed, request == null 

तो, यह एक TryCast के करीब होगा।

+0

इस बनाम ट्राइकास्ट के साथ एकमात्र समस्या यह है कि यदि कास्ट अमान्य है तो TryCast कुछ अपवाद बनाकर अपवाद नहीं उठाएगा। जबकि एएस अपवाद नहीं उठाएगा। – spinon

5

as operator वास्तव में सी # बराबर है:

HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest; 
Debug.Assert(request != null); // request will be null if the cast fails 

हालांकि, एक नियमित डाली शायद बेहतर है: जब एक विशिष्ट URI योजना के साथ बुलाया

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address); 

WebRequest.Create हमेशा एक HttpWebRequest में परिणाम चाहिए। यदि कास्ट विफल होने पर करने के लिए कुछ भी उपयोगी नहीं है, तो परिवर्तनीय को रक्षात्मक रूप से डालने की कोई आवश्यकता नहीं है। यदि आपको प्रोटोकॉल का उपयोग करने की परवाह नहीं है, तो आपके request चर WebRequest प्रकार का होना चाहिए (लेकिन आप HTTP स्थिति कोड जांचने की क्षमता खो देते हैं)।

सी # में चेकिंग और टाइपिंग के बारे में तस्वीर को पूरा करने के लिए, आप is operator पर भी पढ़ना चाहेंगे।

1

as निश्चित रूप से ऑपरेटर है जिसे आप ढूंढ रहे हैं। आप क्या त्रुटि प्राप्त कर रहे हैं?

संबंधित मुद्दे