#vb.net #list #class
Вопрос:
У меня есть общедоступный класс Field_Data
Public Class Field_Data
#Region "Location_v1"
Public Property sample_name As String
Public Property analysis_date As String
Я могу создать экземпляр класса и добавить в него данные для нескольких подмножеств
For iCol = 7 To LastCol
Dim myFDData As New Field_Data
myFDData.sample_name = wkbRep.Worksheets(0).Range(31, iCol).Value
myFDData.analysis_date = wkbRep.Worksheets(0).Range(32, iCol).Value
Я добавляю каждый заполненный класс в список as
Dim Summary_Data As New List Of(Field_Data)
С помощью
Summary_Data.Add(myFDData)
Заполняет список
Затем я хочу выполнить итерацию по списку, чтобы написать сводный файл
For Each MyFieldItem as Field_Data In Summary_Data
Возвращает пустые значения
Что я делаю не так? TIL
Комментарии:
1. Вы нам что-то не показываете или упускаете важную деталь. Я могу следовать вашим шагам и заставить его напечатать правильные значения. Пример: dotnetfiddle.net/RPfEaV
Ответ №1:
Я не уверен, где вы ошибаетесь, потому что вы не включили весь код. Посмотрите, соответствует ли это вашему шаблону. Я предполагаю, что вы извлекаете данные из Excel. Это может быть немного сложно, но вы не предоставили код. Разделение работы на 2 метода может помочь вам увидеть, где что-то идет не так. Установите точку останова и выполните пошаговое наблюдение за значениями переменных.
Private Summary_Data As New List(Of Field_Data)
Private Sub AddDataToSummaryList()
For iCol = 7 To LastCol
Dim myFDData As New Field_Data
myFDData.sample_name = wkbRep.Worksheets(0).Range(31, iCol).Value
myFDData.analysis_date = wkbRep.Worksheets(0).Range(32, iCol).Value
Summary_Data.Add(myFDData)
Next
End Sub
Private Sub WriteListToFile()
For Each MyFieldItem As Field_Data In Summary_Data
'Your code to write file here
Next
End Sub
Ответ №2:
Я думаю, ты добавил все свои вещи не в тот список
Вот простой пример
Imports System
imports System.Collections.Generic
Public Module Module1
Dim x as new List(of String)
Public Sub Main()
Dim x as new List(of String)
x.Add("")
HowMany()
End Sub
sub HowMany()
Console.Out.WriteLine(x.Count)
end sub
End Module
У вас есть новый список X на уровне класса, и вы создали еще один, также называемый X, на более локальном уровне. Вы заполнили локальный, а затем в другом месте использовали класс первого уровня.
Приведенный выше код выводит 0, потому что в список уровней классов никогда ничего не добавляется