【问题标题】:adding new value to List overwrite previous value向列表添加新值覆盖以前的值
【发布时间】:2016-11-14 14:08:15
【问题描述】:

我正在尝试添加到列表中。如果我将声明移动到一个循环中,它可以正常工作但太慢,如果我不这样做,请添加方法覆盖以前的值。

我该怎么办?

Dim _obj As New ClassDAL.Site.SalesPoint
    Dim _r = _obj.GetCities
    Dim temp As New ClassDAL.Site.SalesPoint
    Dim myList As New List(Of ClassDAL.Site.SalesPoint)


    For Each row In _r


        temp.FullCode = Convert.ToString(row.Item(0))
        temp.CityCode = Convert.ToString(row.Item(1))
        temp.Karm = Convert.ToInt32(row.Item(2))
        temp.Name = Convert.ToString(row.Item(3))
        myList.Add(temp)
        temp = New ClassDAL.Site.SalesPoint

    Next

    Return myList

【问题讨论】:

    标签: .net vb.net list foreach reference-type


    【解决方案1】:

    您必须在循环内声明您的变量,因为它是一个引用类型,否则在下一个循环中您将修改对您创建的最后一个项目的引用。

    你可以尝试做这样的事情,但我认为不会更快:

    For Each row In _r
        myList.Add(New ClassDAL.Site.SalesPoint With {
            .FullCode = Convert.ToString(row.Item(0))
            .CityCode = Convert.ToString(row.Item(1))
            .Karm = Convert.ToInt32(row.Item(2))
            .Name = Convert.ToString(row.Item(3))
            })
    
    Next
    

    【讨论】:

    • 返回列表大约需要 4-5 秒
    • 那么时间在SalesPoint的构造函数中。 _r 中有多少行?
    • 才 81。我不明白为什么要花这么长时间。
    • 我认为你应该问一个新问题。贴出SalesPoint 的构造函数的代码,并询问为什么它需要大约 50 毫秒才能运行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多