2013-02-20 34 views
8

इन 2 के बीच क्या अंतर है? एपीआई दस्तावेज से ऐसा लगता है कि वे एक ही चीज़ करने के लिए थे।अभिव्यक्ति वृक्ष में ArrayAccess बनाम ArrayIndex

ArrayAccess

बनाम

ArrayIndex

जो मामले में वे निरर्थक लग रहे हैं, इसलिए मैं कुछ यहाँ याद आ रही किया जाना चाहिए।

उत्तर

10

संपादित करें: मेरा प्रारंभिक उत्तर इतना बुरा गलत था कि मैं फिर कोशिश कर रहा हूं।

Expression.ArrayAccess एक IndexExpression देता है जिसका उपयोग किसी सरणी में किसी तत्व के मान को प्राप्त करने या सेट करने के लिए किया जा सकता है।

Expression.ArrayIndex प्रदान किए गए सरणी अभिव्यक्ति के रैंक (आयामों की संख्या) के आधार पर या तो BinaryExpression या MethodCallExpression देता है। लौटाई गई अभिव्यक्ति का उपयोग सरणी से मान पढ़ने के लिए किया जा सकता है।

तो ArrayAccess आपको एक अभिव्यक्ति देता है जो सरणी डेटा को पढ़ने और लिखने दोनों प्रदान करता है, जबकि ArrayIndex आपको केवल पढ़ने के लिए पहुंच देता है।

+1

यह वास्तव में अधिभार है, जो एकाधिक पैरामीटर लेता है। – Alwyn

+0

डैन ... याद किया गया कि: पी – Corey

+8

मुझे लगता है कि दोनों कारण मौजूद हैं। अभिव्यक्ति पेड़ नेट 3.5 और नेट 4 के बीच बदल गया है। 3.5 में, अभिव्यक्ति पेड़ असाइनमेंट का समर्थन नहीं करते थे, इसलिए केवल 'ऐरेइंडेक्स' था। 4 के साथ, ऐसी किसी चीज़ की आवश्यकता थी जो किसी सरणी में मान सेट करने की अनुमति दे, इसलिए 'ArrayAccess' जोड़ा गया था। – svick