You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET集合添加元素被覆盖问题求助

问题原因

你只在循环外创建了一个BGConstants.SPECIES实例spec,每次循环只是修改这个实例的属性值,再把同一个实例添加到集合中。因为集合存储的是对象引用,所有元素指向的都是同一个内存对象,最终所有元素都会显示最后一次循环赋值的结果。

解决方案

方案1:将对象创建移到循环内部

每次循环都新建一个SPECIES实例,这样添加到集合的是不同的对象引用:

Public Class SPECIES
    Public Property SPECIESDESC As String
    Public Property SPECIESCOUNT As Integer
End Class

Dim speciesSpec As New List(Of BGConstants.SPECIES)
Dim result = bgFiles.GroupBy(Function(r) r.SPECIES_TYPE_ID)

For Each r In result
    ' 每次循环新建一个SPECIES实例
    Dim spec As New BGConstants.SPECIES()
    spec.SPECIESDESC = r.Key.ToString
    spec.SPECIESCOUNT = r.Count
    speciesSpec.Add(spec)
Next

方案2:使用LINQ直接转换(更简洁)

利用LINQ的Select方法直接将分组结果转换成SPECIES对象集合,不需要手动循环:

Public Class SPECIES
    Public Property SPECIESDESC As String
    Public Property SPECIESCOUNT As Integer
End Class

Dim speciesSpec = bgFiles.GroupBy(Function(r) r.SPECIES_TYPE_ID) _
                        .Select(Function(g) New BGConstants.SPECIES() With {
                            .SPECIESDESC = g.Key.ToString(),
                            .SPECIESCOUNT = g.Count()
                        }).ToList()

这样处理后,集合中的每个元素都是独立的SPECIES对象,不会出现被覆盖的问题,能得到你预期的结果。

内容的提问来源于stack exchange,提问作者Ann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 23:00:59