आज सी # गतिशीलता को देखते समय मुझे कुछ आश्चर्यचकित हुआ (मैंने कभी उनका उपयोग नहीं किया है, लेकिन हाल ही में मैं नैन्सी वेब ढांचे के साथ प्रयोग कर रहा हूं)। मैंने पाया कि मैं ऐसा नहीं कर सकता है:मैं एक ExpandoObject में क्यों इंडेक्स नहीं कर सकता?
dynamic expando = new ExpandoObject();
expando.name = "John";
Console.WriteLine(expando["name"]);
अंतिम पंक्ति एक अपवाद फेंकता है:
प्रकार की 'System.Dynamic.ExpandoObject'
एक अभिव्यक्ति के लिए [] के साथ अनुक्रमण लागू नहीं कर सकता
मैं त्रुटि संदेश को समझता हूं, लेकिन मुझे समझ में नहीं आता कि यह क्यों हो रहा है। मैंने ExpandoObject के लिए प्रलेखन को देखा है और यह स्पष्ट रूप से IDictionary<,>
लागू करता है और इस प्रकार this.[index]
विधि (MSDN) है। मैं इसे क्यों नहीं बुला सकता?
बेशक, मुझे ExpandoObject
को मैन्युअल रूप से एक शब्दकोश में डाउनकास्टिंग से रोकने और फिर उसमें अनुक्रमणित करने से रोकने के लिए कुछ भी नहीं है, लेकिन उस तरह की समस्या का उल्लंघन करता है; यह यह भी समझाता नहीं है कि कैसे Expando अपने इंटरफेस की विधि को छिपाने में सक्षम था।
यहां क्या हो रहा है?
स्पष्ट इंटरफेस कार्यान्वयन केवल यदि उद्देश्य यह है कि इंटरफेस करने के लिए डाला जाता है पहुँचा जा सकता है, है ना कुछ विशेष है ExpanoObject करने के लिए। –
प्रासंगिक स्रोत कोड: http://referencesource.microsoft.com/#System.Core/Microsoft/Scripting/Actions/ExpandoObject.cs,552 –