2013-02-14 14 views
23

typeof(Object[,][]).Name का मूल्यांकन Object[][,]टाइपऑफ (ऑब्जेक्ट [,] []) क्यों है। नाम बराबर "ऑब्जेक्ट [] [,]"?

इसी प्रकार देता है, typeof(Object[][,]).NameObject[,][]

लगता है जैसे अल्पविराम बिना किसी कारण के बढ़ रहा है देता है।

क्या देता है?

+0

मुझे अल्पविराम की स्थिति बदलने का नियम मिलता है लेकिन मुझे नहीं पता कि यह ऐसा क्यों काम कर रहा है। कॉमा सरणी के केंद्र को प्रतिबिंबित करता है। उदाहरण के लिए; '[,] [] [] [] [] '] आपको' [] [] [] [] [,] ',' [] [,] [] [] [] '] आपको देता है [] [] [ ] [,] [] ',' [] [] [,] [] [] [] आपको '[] [] [,] [] []' परिणामस्वरूप देता है। –

+1

+1। अच्छा प्रश्न! – ja72

+2

@ सोनर गॉनूल: कोशिश करें [[] [,] [,]],, [,,,,] '- अब यह स्पष्ट है कि क्या हो रहा है? –

उत्तर

19

रैगिंग और आयताकार सरणी मिलाकर पागलपन के लिए एक नुस्खा है। किसी दिए गए प्रकार के नोटेशन के बारे में आपका अंतर्ज्ञान लगभग हमेशा गलत है, या, कम से कम, मेरा है।

विषय पर मेरा लेख पढ़ें और देखें कि अगर मदद करता है आप समझते हैं कि यहाँ पर जा रहा है:

http://blogs.msdn.com/b/ericlippert/archive/2009/08/17/arrays-of-arrays.aspx

असल: सी # और प्रतिबिंब मिश्रित प्रचंड/आयताकार सरणियों दो अलग अलग तरीकों notate, प्रत्येक के लिए उनके स्वयं के कारण

+0

+1, लिंक से सबसे अच्छा उद्धरण _ "आप वास्तव में एक सरणी निर्दिष्टकर्ता को जोड़कर उस प्रकार की सरणी में तत्व प्रकार नहीं बनाते हैं।" _ – ja72

+0

@ ja72: सही है, सी # में यह मामला है। लेकिन प्रतिबिंब में, जो सी # के नियमों का पालन नहीं करता है, यह सिर्फ प्रकार के नाम के अंत में सरणी संशोधक को चिपकता है, मध्य में नहीं। –

+0

आपके उत्तर एरिक के लिए धन्यवाद। चिंता न करें - मैं वास्तव में इस तरह के किसी भी प्रकार का उपयोग अपने कोड में नहीं कर रहा हूं। मैं एक ऐसा टूल लिख रहा हूं जो प्रतिबिंब का उपयोग करके सार्वजनिक एपीआई की एक दोस्ताना सूची बनाता है, और इस परीक्षण मामले में अलार्म घंटी थी। – RobSiklos

3

उस उद्देश्य को छोड़कर जिसके लिए आप इस तरह के विदेशी सरणी घोषित करना चाहते हैं, ऐसा लगता है कि प्रतिबिंब एक सरणी का नाम पुन: उपयोग करने का तरीका है: पहला, यह सरणी के तत्व प्रकार का नाम उत्पन्न करता है, और उसके बाद वर्ग कॉमा की उचित संख्या के साथ ब्रैकेट।

Object[,][] 1 डी सरणी का 2 डी सरणी है; 2 डी सरणी का तत्व प्रकार Object[] है, इसलिए कुल परिणाम "Object[]"+"[,]" है।

typeof(Object[][,][,,][,,,][,,,,]).Name 

Object[,,,,][,,,][,,][,][] 

है मैं इसके पीछे एक कारण कार्यान्वयन की दक्षता के अलावा अन्य नहीं दिख रहा है: यह के रूप में लंबे समय के रूप

यहाँ जिस तरह से काम करता है एल्गोरिथ्म का एक और उदाहरण है संगत है, इससे कोई फर्क नहीं पड़ता कि वाक्यविन्यास सी # से मेल खाता है या नहीं। आखिरकार, सी # .NET ब्रह्मांड में एकमात्र भाषा नहीं है।

+1

सही; यहां विषमता यह है कि सी # कहता है कि 'ऑब्जेक्ट [,] [] 'ऑब्जेक्ट []' की दो-डी सरणी है, जब यह नैतिक रूप से दिखता है कि यह 'ऑब्जेक्ट [,]' । –

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