//always works, returning a valid object into _page
_page = _httpContext.Handler as System.Web.UI.Page;
//Fails throwing the exception : Unable to cast object of type 'System.Web.DefaultHttpHandler' to type 'System.Web.UI.Page'
_page = (System.Web.UI.Page)_httpContext.Handler;
मुझे पता है कि ऐसा क्यों होता चाहते हैं नहीं है क्यों 'के रूप में' कीवर्ड काम करता है?जबकि() डाली
संपादित करें:
//Fixes the problem
if(_httpContext.Handler is System.Web.UI.Page)
_page = (System.Web.UI.Page)_httpContext.Handler;
तो मैं 'के रूप में' कीवर्ड बयान डिबग, मैं कभी नहीं एक अशक्त संदर्भ (वस्तु हमेशा ठीक से सौंपा) मिलता है। हालांकि() कास्ट अपवाद बनाता है जब तक कि उसके पास स्टेटमेंट न हो।
संपादित करें: कक्षा के माध्यम से लगभग 15 रनों के बाद मैं एक शून्य प्राप्त करने में सक्षम था। ऐसा लगता है कि() कास्ट अपवाद को कितनी तेजी से पकड़ने की तुलना में एक नल खोजने के लिए और अधिक रन लेता है।
OLD: जब भी कक्षा 'ब्रेक पॉइंट हिट चलाती है तो' एएस 'कथन पर डीबग होता है - कभी भी शून्य नहीं होता है।
जब tthere में '()' कथन में डीबग होता है, तो हर बार ब्रेक पॉइंट कास्ट सही ढंग से काम करता है। Werid
मुझे विश्वास नहीं है। मैं कक्षा 1 foo = (class1) बार की बजाय और foo.Property या foo.Method() के साथ बाद में उपयोगी नल अपवाद प्राप्त करने के बजाय कास्ट अपवाद प्राप्त करूंगा। वह शून्य अपवाद आपके "जैसा" के दायरे से बाहर कहीं भी हो सकता है। अगर मैं कोड को कभी-कभी असफल होने की उम्मीद करता हूं, तो मैं "as" का उपयोग करूंगा और शून्य की जांच करूंगा। –
यह सामान्य पैटर्न है। आप 'as' के साथ रूपांतरित करते हैं, और फिर शून्य के लिए जांचें। – Tejs