استرجاع البيانات من VB.NET arraylist من الكائنات
سؤال
أحاول استرداد القيمة الصحيحة من 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)