#asp.net #vb.net
#asp.net #vb.net
Вопрос:
Я пытаюсь вставить свойство класса в список через цикл foreach в VB.NET .
Dim objCoInsurers As List(Of CoInsurer)
Класс CoInsurer состоит из 5 свойств
Ниже приведен код, в котором свойства класса вставляются в мой список
objCoInsurers = New List(Of CoInsurer)
Dim oCoInsurer As New CoInsurer
For Each row As GridViewRow In grdCoInsurance.Rows
Dim lblCoInsurerID = DirectCast(row.FindControl("lblCoInsurerID"), Label)
Dim textCoInsurerID As String = lblCoInsurerID.Text
Dim lblCoInsurerName = DirectCast(row.FindControl("lblCoInsurerName"), Label)
Dim CoInsurerName As String = lblCoInsurerName.Text
oCoInsurer.InsurerID = lblCoInsurerID.Text
oCoInsurer.InsurerName = lblCoInsurerName.Text
objCoInsurers.Add(oCoInsurer)
Next
Проблема заключается в том, что когда два списка содержат одинаковое значение, первый список перезаписывает второй, если количество строк равно 2 в gridview или более
Комментарии:
1. Пожалуйста, не помечайте C #, когда ваш язык VB.NET
Ответ №1:
Подумайте об этом. Допустим, вы хотите добавить людей в список, используя ручку и бумагу. Я представляюсь вам в синей рубашке, и вы записываете мое имя. Затем я снимаю свою синюю рубашку, надеваю красную рубашку и представляюсь вам, а вы записываете мое имя. Затем я снимаю свою красную рубашку, надеваю зеленую рубашку и представляюсь вам, а вы записываете мое имя. Сколько имен у вас в списке? Скольким людям соответствуют эти имена? Какого цвета рубашка у людей, которым соответствуют эти имена?
Учитывая, что ООП основано на поведении объектов реального мира, подумайте о том, что на самом деле делает ваш код. Сколько ColInsurer
объектов создает ваш код? Только один, верно? Не имеет значения, сколько рубашек разных цветов вы надеваете на этот объект и сколько раз добавляете его в список, все равно остается только один объект, поэтому он может быть одет только в одну рубашку одновременно. В конце вашего цикла каждый элемент в списке ссылается на один и тот же объект, и этот объект будет иметь любые значения свойств, которые вы установили последними.
Если вы хотите добавить несколько различных объектов в список, то вам действительно нужно создать несколько различных объектов. Это означает перемещение создания объекта внутри цикла, так что это происходит на каждой итерации. Вы создаете новый объект, устанавливаете его свойства, а затем добавляете его в список:
For Each row As GridViewRow In grdCoInsurance.Rows
Dim oCoInsurer As New CoInsurer
Ответ №2:
Я предполагаю, что ваш класс выглядит примерно так.
Public Class CoInsurer
Public Property InsurerID As String
Public Property InsurerName As String
End Class
Мне интересно, является ли InsurerID
это a String
, а не Integer
or Long
. Если это число, обязательно окружите значение присваивания в цикле CInt()
символом или CLng()
Я избавился от некоторых ненужных переменных. Как объяснил jmcilhinney, вам необходимо создавать новый экземпляр CoInsurer
для каждой итерации вашего цикла.
Private Sub OPCode()
For Each row As GridViewRow In grdCoInsurance.Rows
Dim oCoInsurer As New CoInsurer
oCoInsurer.InsurerID = DirectCast(row.FindControl("lblCoInsurerID"), Label).Text
oCoInsurer.InsurerName = DirectCast(row.FindControl("lblCoInsurerName"), Label).Text
objCoInsurers.Add(oCoInsurer)
Next
End Sub