VB.NET повторите элементы класса, сохраненные в списке(Класс)

#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, потому что в список уровней классов никогда ничего не добавляется