سؤال

هل من الممكن في لغة C# تهيئة مصفوفة في الفهرس الفرعي 1، على سبيل المثال؟

أنا أعمل مع إمكانية التشغيل المتداخل لـ Office، وكل خاصية عبارة عن مصفوفة كائنات تبدأ بـ 1 (أفترض أنها تمت برمجتها في الأصل في VB.NET)، ولا يمكنك تعديلها، يجب عليك تعيين المصفوفة بأكملها حتى تقبل التغييرات.

كحل بديل، أقوم باستنساخ المصفوفة الأصلية، وتعديلها، وتعيينها ككل عند الانتهاء.

لكنني كنت أتساءل عما إذا كان من الممكن إنشاء مصفوفة جديدة غير صفرية

هل كانت مفيدة؟

المحلول

نصائح أخرى

من الممكن أن تفعل ما تطلبه، انظر الكود أدناه.

// 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);

ليس ببساطة.ولكن يمكنك بالتأكيد كتابة صفك الخاص.سيكون به مصفوفة كمتغير خاص، وقد يعتقد المستخدم أن مصفوفته تبدأ عند 1، ولكنها في الواقع تبدأ عند الصفر وأنت تطرح 1 من جميع عمليات الوصول إلى المصفوفة الخاصة به.

يمكنك كتابة فئة الصفيف الخاصة بك

لا أعتقد أنه من الممكن تعديل فهرس البداية للمصفوفات.

سأقوم بإنشاء مصفوفتي الخاصة باستخدام الأدوية العامة وأتعامل معها في الداخل.

ما عليك سوى الاحتفاظ بـ const int المسمى "offset" بقيمة واحدة، وأضف ذلك دائمًا إلى المشتركين في التعليمات البرمجية الخاصة بك.

لا أعتقد أنه يمكنك إنشاء صفائف غير الصفرية في C#، ولكن يمكنك بسهولة كتابة فئة مجمعة خاصة بك حول هياكل البيانات المضمنة. ستحتوي فئة المجمع هذه على مثيل خاص لنوع المصفوفة الذي تحتاجه؛التحميل الزائد على عامل الفهرسة [] غير مسموح به، ولكن يمكنك إضافة مفهرس إلى فئة لجعلها تتصرف مثل مصفوفة قابلة للفهرسة، راجع هنا.يمكن لوظيفة الفهرس التي تكتبها أن تضيف (أو تطرح) 1 إلى جميع الفهارس التي تم تمريرها.

يمكنك بعد ذلك استخدام الكائن الخاص بك على النحو التالي، وسوف يتصرف بشكل صحيح:

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

في VB6 يمكنك تغيير المصفوفة لتبدأ بالرقم 0 أو 1، لذلك أعتقد أن VBScript يمكنه فعل الشيء نفسه.بالنسبة لـ C#، هذا غير ممكن ولكن يمكنك ببساطة إضافة قيمة NULL في أول [0] وبدء القيمة الحقيقية عند [1].طبعا هذا خطير بعض الشيء..

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top