2008-09-17 3 views
6

में मनमाने ढंग से प्रारंभिक सूचकांक पर एक सरणी शुरू करना क्या सी # में एक सरणी शुरू करने के लिए संभव है, उदाहरण के लिए, सबइंडेक्स 1?सी #

मैं कार्यालय इंटरऑप के साथ काम कर रहा हूं, और प्रत्येक प्रॉपर्टी एक ऑब्जेक्ट सरणी है जो 1 से शुरू होती है (मुझे लगता है कि यह मूल रूप से VB.NET में प्रोग्राम किया गया था), और आप इसे संशोधित नहीं कर सकते हैं, आपको पूरे सरणी को सेट करना होगा यह परिवर्तन स्वीकार करने के लिए।

एक कामकाज के रूप में मैं मूल सरणी क्लोन कर रहा हूं, इसे संशोधित कर रहा हूं, और इसे पूरा होने पर इसे पूरी तरह से स्थापित कर रहा हूं।

लेकिन, मैं अगर यह संभव था एक नया गैर शून्य आधारित सरणी

+1

vb.net arrays 0 से भी शुरू होता है। –

+0

लेकिन आप उन्हें बना सकते हैं यदि आप उन्हें नहीं चाहते हैं (नया ऐरे (3 से 5) या ऐसा कुछ) – juan

उत्तर

7

आप Array.CreateInstance का उपयोग कर सकते हैं।

Array Types in .NET

+0

के साथ किया जा सकता है, तो मैं वास्तव में जानना चाहता था कि यह वाक्य रचनात्मक रूप से संभव है या नहीं, लेकिन यह एक अच्छा समाधान है – juan

+0

कृपया उन दस्तावेजों को जोड़ने के बजाय अपने उत्तरों में कोड शामिल करें जो कल मौजूद नहीं हो सकते । – jordanbtucker

+0

लिंक टूटा .... – kjbartel

0

आप अपनी खुद की सरणी वर्ग

-1

VB6 में लिख सकते हैं बनाने के लिए आप सरणी बदल सकता है 0 या 1 के साथ शुरू करने के लिए सोच रहा था , इसलिए मुझे लगता है कि वीबीस्क्रिप्ट वही कर सकता है। सी # के लिए, यह संभव नहीं है लेकिन आप केवल पहले [0] में शून्य मान जोड़ सकते हैं और [1] पर वास्तविक मान प्रारंभ कर सकते हैं। बेशक, यह थोड़ा खतरनाक है ...

+0

गुणों को सरणी को 1 में शुरू करने की आवश्यकता होती है, इसलिए यह – juan

1

बस नहीं। लेकिन आप निश्चित रूप से अपनी खुद की कक्षा लिख ​​सकते हैं। इसमें एक निजी चर के रूप में एक सरणी होगी, और उपयोगकर्ता को लगता है कि उसकी सरणी 1 से शुरू होती है, लेकिन वास्तव में यह शून्य से शुरू होती है और आप अपने सभी सरणी एक्सेसों से 1 घटा रहे हैं।

+1

काम नहीं करेगा हाँ, आप हमेशा कुछ भी कर सकते हैं खुद ... सवाल यह है कि अगर इसे सी # सिंटैक्स – juan

0

देखें मैं अगर यह सरणियों की शुरुआत सूचकांक को संशोधित किया जा सकता है नहीं लगता है।

मैं जेनेरिक का उपयोग करके अपना स्वयं का सरणी बनाउंगा और इसे अंदर संभाल सकता हूं।

0

बस एक के मूल्य के साथ 'ऑफ़सेट' नामक कॉन्स int का रखें, और हमेशा अपने कोड में अपनी सदस्यता में जोड़ें।

0

मुझे नहीं लगता कि आप सी # में गैर-शून्य आधारित सरणी बना सकते हैं, लेकिन आप अंतर्निहित डेटा संरचनाओं के आसपास आसानी से एक रैपर वर्ग लिख सकते हैं। यह रैपर वर्ग सरणी प्रकार का एक निजी उदाहरण रखेगा आपको चाहिए [] इंडेक्सिंग ऑपरेटर को अधिभारित करने की अनुमति नहीं है, लेकिन आप इसे एक अनुक्रमिक सरणी की तरह व्यवहार करने के लिए एक श्रेणी में एक इंडेक्सर जोड़ सकते हैं, here देखें। सूचकांक समारोह आप लिखते हैं तो, सभी सूचकांक के में पारित करने के लिए जोड़ सकते हैं (या घटाना) 1

फिर आप इस प्रकार अपने वस्तु इस्तेमाल कर सकते हैं, और यह ठीक से व्यवहार होगा:।

myArrayObject[1]; //would return the zeroth element. 
17

यह संभव है जैसा कि आप नीचे दिए गए कोड को देखने का अनुरोध करते हैं।

// Construct an array containing ints that has a length of 10 and a lower bound of 1 
Array lowerBoundArray = Array.CreateInstance(typeof(int), new int[1] { 10 }, new int[1] { 1 }); 

// insert 1 into position 1 
lowerBoundArray.SetValue(1, 1); 

//insert 2 into position 2 
lowerBoundArray.SetValue(2, 2); 

// IndexOutOfRangeException the lower bound of the array 
// is 1 and we are attempting to write into 0 
lowerBoundArray.SetValue(1, 0); 
+5

+1: उपयोगी कोड का एक ब्लॉक अपठनीय गद्य * लगभग * कोड के हजारों लिंक के लायक है। –

+0

इसे ऐरे के बजाय int [] के रूप में टाइप करने का कोई तरीका है? – JJS