繁体   English   中英

通过 vb.net 中的 foreach 循环在列表中插入 class 属性

[英]Inserting class property in list through foreach loop in vb.net

我正在尝试通过 VB.NET 中的 foreach 循环将 class 属性插入列表中。

Dim objCoInsurers As List(Of CoInsurer)

CoInsurer class 由 5 个属性组成

下面是在我的列表中插入 class 属性的代码

 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

问题是当两个列表包含相同的值时,如果 gridview 中的行数为 2 或更多,第一个列表会覆盖第二个列表

考虑一下。 假设您想使用笔和纸将人员添加到列表中。 我穿着一件蓝色衬衫向你展示自己,你写下我的名字。 然后我脱下我的蓝色衬衫,穿上一件红色衬衫,向你展示自己,你写下我的名字。 然后我脱下我的红衬衫,穿上一件绿衬衫,向你展示自己,你写下我的名字。 你有多少名字在名单上? 这些名字对应多少人? 这些名字对应的人穿什么颜色的衬衫?

鉴于 OOP 是基于现实世界对象的行为,请考虑您的代码实际执行的操作。 您的代码创建了多少ColInsurer对象? 只有一个,对吧? 不管你在那个 object 上穿了多少件不同颜色的衬衫,以及你将它添加到列表中多少次,仍然只有一件 object,所以它一次只能穿一件衬衫。 在循环结束时,列表中的每个项目都引用相同的 object 并且 object 将具有您最后设置的任何属性值。

如果您想将多个不同的对象添加到列表中,那么您实际上必须创建多个不同的对象。 这意味着将 object 的创建移动到循环内,因此每次迭代都会发生。 您创建一个新的 object,设置其属性,然后将其添加到列表中:

For Each row As GridViewRow In grdCoInsurance.Rows
    Dim oCoInsurer As New CoInsurer

我猜你的 class 看起来像这样。

Public Class CoInsurer
    Public Property InsurerID As String
    Public Property InsurerName As String
End Class

我想知道InsurerID是否是String而不是IntegerLong 如果是数字,请务必在循环中用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM