2010-08-12 14 views
6

तो मैं सिर्फ सी # सीख रहा हूं, और मुझे कुछ ऐसा लगता है जो मुझे अजीब लगता है ... मैं प्रतिनिधियों के साथ खेल रहा हूं और एक प्रतिनिधि DelegateReturnsInt बनाता है। अब, जब मैं एक foreach पाश का उपयोग करें, किताब इस तरह इसका इस्तेमाल करने से पता चलता:फोरैच स्पष्ट/निहित ओवरराइड के बिना कैसे डाला जाता है?

foreach(DelegateReturnsInt del in theDelegate.getInvocationList()) 

अब मुझे पता है कि getInvocationList() प्रतिनिधि [] की एक सरणी देता है, लेकिन यह कैसे उन्हें में बदलने का है DelegateReturnsInt? क्योंकि मैं सिर्फ चारों ओर खेलते हैं और पाश के लिए एक करने के लिए एक foreach से इसे बदलने के लिए करना चाहता था मैं पूछता हूँ, इसलिए मैं इस

Delegate[] del = theDelegate.GetInvocationList(); 
for(int i = 0; i < del.Length; i++){ 
    int result = del[i](); 

बनाया है, लेकिन है कि एक विधि के रूप में डेल [i] न दिखाई दें। मैंने DelegateReturnsInt और ऐसे में कास्टिंग करने का प्रयास किया है, लेकिन यह मुझे परिभाषित नहीं होने के बारे में कास्ट प्रकार त्रुटियों देता है।

मेरा बड़ा सवाल यह है कि foreach() इतना खास बनाता है?

उत्तर

11

यह एक निहित कास्ट करता है (यदि आप उत्सर्जित आईएल देखते हैं, तो आप इसे देखेंगे)। इसका मतलब यह भी है कि आप उस लाइन पर एक अप्रत्याशित कास्ट अपवाद प्राप्त कर सकते हैं यदि आप ऐसा नहीं करते हैं जो आप कहते हैं।

+0

प्रतिनिधि [] del = theDelegate.GetInvocationList(); (int i = 0; i Nicholas

+0

https://connect.microsoft.com/VisualStudio/feedback/details/530748/new-fxcop-rule-for-net2-on-foreach-in-non-generic-ienumerable – Guillaume

+0

हां बिल्कुल, वहां है 'फोरैच' में मौजूद एक "अदृश्य" या "निहित" कास्ट (सिवाय इसके कि यदि आप 'foreach' में 'var' का उपयोग करते हैं, जिसे मैं वास्तव में अनुशंसा करता हूं)। यह कलाकार अदृश्य है, लेकिन यह दोनों अंतर्निहित प्रकार रूपांतरण और स्पष्ट प्रकार के रूपांतरणों के साथ काम करता है। उदाहरण के लिए मूल प्रकार 'प्रतिनिधि' से व्युत्पन्न प्रकार 'DelegateReturnsInt' (डाउनकास्ट) में संदर्भ रूपांतरण सी # शब्दावली में एक _explicit संदर्भ रूपांतरण_ है। तो "अदृश्य" कास्ट स्पष्ट रूपांतरणों के लिए भी काम करता है (रन-टाइम या कोर्स पर 'अमान्यकास्टएक्सप्शन' फेंक सकता है)। –

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