2012-08-01 12 views
5

का आकार जब मैं नीचे के रूप में सी # में एक सरणी आकार बदलने के लिए प्रयास करते हैं,एक संपत्ति या इंडेक्सर एक बाहर या रेफरी पैरामीटर के रूप में पारित नहीं किया जा सकता है, जबकि सरणी

Array.Resize(ref Globals.NameList, 0); 

मैं नीचे त्रुटि मिलती है

A property or indexer may not be passed as an out or ref parameter 

ग्लोबल्स एक वस्तु है। नामसूची ग्लोबल्स कक्षा में घोषित एक स्ट्रिंग प्रकार सरणी है।

कृपया सही कोड पोस्ट करके इसे ठीक करने में मेरी सहायता करें।

धन्यवाद!

+0

बस एक अधिक जानकारी। वही त्रुटि तब होती है जब हम int.TryParse() में पैरामीटर के रूप में किसी प्रॉपर्टी का उपयोग करते हैं। इस मामले में हमें ऑपरेशन करने के लिए एक मध्यवर्ती चर की भी आवश्यकता है। फिर संपत्ति के चर वैल्यू असाइन करें। – Narendra

उत्तर

18

उपयोग चर, लेकिन नहीं संपत्ति

var obj = Globals.NameList; 
Array.Resize(ref obj , 0); 
Globals.NameList=obj; 
+1

सही है, लेकिन चूंकि नया आकार '0' है, यह थोड़ा अधिक है। –

+0

धन्यवाद burning_LEGION .. यह तय है :) – codebug

8

संकलक त्रुटि खुद कहता है - आप संदर्भ द्वारा एक संपत्ति पारित नहीं कर सकते हैं; केवल एक चर।

सी # कल्पना खंड 10.6.1.2 से:

जब एक औपचारिक पैरामीटर एक संदर्भ पैरामीटर, एक विधि मंगलाचरण में इसी तर्क कीवर्ड ref एक चर संदर्भ के बाद से मिलकर चाहिए है (खंड 5.3.3) औपचारिक पैरामीटर के समान प्रकार के।

एक संपत्ति पहुंच अभिव्यक्ति चर-संदर्भ के रूप में नहीं गिना जाता है।

आप शायद चाहते हैं:

var tmp = Globals.NameList; 
Array.Reize(ref tmp, 0); 
Globals.NameList = tmp; 

नोट वीबी संदर्भ द्वारा एक संपत्ति गुजर की अनुमति देने वाला है, लेकिन यह ऊपर की तरह कार्य करता है। विशेष रूप से, विधि के भीतर प्रत्येक असाइनमेंट प्रासंगिक सेटटर को कॉल करने के बजाय केवल अस्थायी मान को प्रभावित करेगा।

भी ध्यान रखें कि एक वर्ग परिवर्तनशील सार्वजनिक गुणों के साथ Globals बुलाया होने एक डिजाइन गंध है ...

+0

धन्यवाद जॉन स्कीट। यदि यह एक अच्छा दृष्टिकोण नहीं है, तो मुझे कुछ वैश्विक चर और वस्तुओं को समूहबद्ध करने की आवश्यकता है जिन्हें पूरे आवेदन के लिए सुलभ किया जाना चाहिए सबसे अच्छा अभ्यास क्या होना चाहिए? – codebug

+0

जॉन स्कीट .. मैं एकाधिक पद को उत्तर के रूप में स्वीकार नहीं कर सकता हूं? एक उत्तर के रूप में भी आपकी टिप्पणी स्वीकार करना चाहता था। वर्तमान में मैं अपने स्तर पर अपनी पोस्ट को ऊपर नहीं उठा सकता :) – codebug

+1

@codebug: आप केवल एक पोस्ट स्वीकार कर सकते हैं, हां। स्वीकार करें कि जो भी आपके लिए सबसे उपयोगी है। डिजाइन के लिए - * आवश्यकता * * वस्तुओं से बचने की कोशिश करें जिन्हें पूरे एप्लिकेशन के लिए सुलभ बनाया जाना चाहिए "। निर्भरता इंजेक्शन का उपयोग करने के लिए प्रत्येक कक्षा को इसकी जरूरतों को व्यक्त करने की अनुमति दें। –

0

कर

Array arr = Globals.NameList; 
Array.Resize(ref arr, 0); 
Globals.NameList = arr; 
संबंधित मुद्दे

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