استرجاع البيانات من VB.NET arraylist من الكائنات

StackOverflow https://stackoverflow.com/questions/1062320

  •  21-08-2019
  •  | 
  •  

سؤال

أحاول استرداد القيمة الصحيحة من ArrayList من الكائنات (.صافي 1.1 الإطار):

لدي التالية تحديدا:

Public AlList As New ArrayList

Public Class ItemInfo
    Public ItemNo As Int16
    Public ItemType As String
    Public Reports As Array
    Public PDFs As Array
End Class

الحدث form_load رمز يحتوي على:

Dim AnItemObj As New ItemInfo

ثم حلقة التي تشمل:

AnItemObj.ItemNo = AFile.RecordId
AnItemObj.ItemType = temp
AlList.Add(AnItemObj)

لذا يجب أن يكون الآن ArrayList من هذه الكائنات ، ومع ذلك إذا كنت في محاولة استرداد البيانات:

MsgBox(AlList(5).ItemNo)

أنا دائما الحصول على لتلك الدول التي يتواجدون من القيمة الأخيرة في القائمة.

ما أنا في عداد المفقودين ؟

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

المحلول

ضع التعليمات البرمجية التالية:

Dim AnItemObj As New ItemInfo

داخل الحلقة الذي يضيف AnItemObj إلى القائمة.

عند إضافة مرجع إلى نوع القائمة ، يمكنك فقط إضافة مرجع لا قيمة.

وهذا يعني أنه إذا قمت بإضافة 10 مرات نفس المثال إلى القائمة ، فإنه سيتم إضافة 10 مرات نفس الإشارة إلى القائمة.ولكن بعد ذلك إذا كنت لا تزال لديها إشارة إلى هذه الحالة يمكنك تعديل خصائصه و كل 10 إدخالات في قائمة تشير إلى نفس المرجعية في الذاكرة ، كل 10 مقالات سيتم تعديل.

نصائح أخرى

وهكذا، كنت قد حصلت على:

Dim AnItemObj As New ItemInfo
For ...
    AnItemObj.ItemNo = AFile.RecordId
    AnItemObj.ItemType = temp
    AlList.Add(AnItemObj)
Next

ما الذي يحدث هنا هو أنك خلق كائن واحد، وتحديد القيم على ذلك، وإضافة إشارة إلى ذلك، إلى قائمتك. كنت ثم تغيير ItemInfo وaddign إشارة أخرى إلى نفس البند إلى قائمة

وتحتاج لبناء كائن جديد في كل حلقة، فضفاضة على النحو التالي:

Dim AnItemObj As ItemInfo
For ...
    AnItemObj = New ItemInfo
    AnItemObj.ItemNo = AFile.RecordId
    AnItemObj.ItemType = temp
    AlList.Add(AnItemObj)
Next

هل إنشاء مثيل جديد من iteminfo لكل زيادة من الحلقة؟

لا استطيع ان ارى كود حلقة بالكامل ولكن أتصور أن سبب لم يحدد AnItemObj إلى كائن جديد ItemInfo. لذلك أنت فقط في نهاية المطاف تعديل نفس الكائن وإضافته إلى القائمة مرة أخرى (جميع العناصر في نقطة القائمة إلى نفس الكائن).

AnItemObj = New ItemInfo()
AnItemObj.ItemNo = AFile.RecordId
AnItemObj.ItemType = temp
AlList.Add(AnItemObj)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top