Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 将项目添加到列表会产生重复的结果。什么是更好的方法?_Vb.net_Class_List - Fatal编程技术网

Vb.net 将项目添加到列表会产生重复的结果。什么是更好的方法?

Vb.net 将项目添加到列表会产生重复的结果。什么是更好的方法?,vb.net,class,list,Vb.net,Class,List,我有这个代码来返回我们组织的资金来源列表 Dim FundSourceList As New List(Of FundSource) Dim fs As New FundSource If results.Count > 0 Then For Each result In results fs.FundID = result.Item("strFundID") fs.FundDescriptio

我有这个代码来返回我们组织的资金来源列表

    Dim FundSourceList As New List(Of FundSource)

    Dim fs As New FundSource

    If results.Count > 0 Then
        For Each result In results


            fs.FundID = result.Item("strFundID")
            fs.FundDescription = result.Item("txtFundIDDescr")
            fs.ShortFundDescription = result.Item("txtFundIDDescrShort")

            FundSourceList.Add(fs)

        Next
    End If


    Return FundSourceList
问题是,当我在结果FundSourceList中循环时,它显示的只是最后一个值。例如,如果我有三个资金来源(州、联邦、运动),那么当我使用此代码循环时,我列出的所有资金来源都是运动、运动、运动

    For Each FundSource In FundSources
        Debug.Print(FundSource.FundDescription)
    Next
所以我把代码改成这个。我将fs变量的创建移到了循环中

    Dim results = From result In dsResult.Tables(0) Select result

    Dim FundSourceList As New List(Of FundSource)



    If results.Count > 0 Then
        For Each result In results
            Dim fs As New FundSource

            fs.FundID = result.Item("strFundID")
            fs.FundDescription = result.Item("txtFundIDDescr")
            fs.ShortFundDescription = result.Item("txtFundIDDescrShort")

            FundSourceList.Add(fs)

        Next
    End If


    Return FundSourceList

这很好,但现在我正在一次又一次地创建一个新类。这对我来说似乎有点低效。我能不能在循环之外创建类并反复使用它?谢谢。

如果你有3个资金来源,你需要三个资金来源对象。就这么简单。我不知道什么是低效的


如何将3个资金来源添加到列表中,而只创建一个?

如果有3个资金来源,则需要三个资金来源对象。就这么简单。我不知道什么是低效的


您如何向列表中添加3个资金来源,而只创建一个?

您实际上并没有创建一个类-该类是方法和属性的代码定义。当您使用新操作时,您正在创建该类的实例,从而生成一个对象。当您有一个对象列表(如FundSourceList)时,您希望其中的项目是单个对象。因此,是的,你在底部的解决方案是正确的。您提到了效率问题——当您实例化对象时,基本上所有发生的事情(在本例中)都是分配一些内存来存储变量(以及一些对托管内存的引用,但您不需要在这里担心)。这是必要的,并且是在幕后优化的,因此您也不必担心这一点。

您实际上并不是在创建类-类是方法和属性的代码定义。当您使用新操作时,您正在创建该类的实例,从而生成一个对象。当您有一个对象列表(如FundSourceList)时,您希望其中的项目是单个对象。因此,是的,你在底部的解决方案是正确的。您提到了效率问题——当您实例化对象时,基本上所有发生的事情(在本例中)都是分配一些内存来存储变量(以及一些对托管内存的引用,但您不需要在这里担心)。这是必要的,并且是在幕后优化的,因此您也不必担心这一点。

您不能在循环之外实例化对象以实现您所追求的结果

这是因为对象将是引用类型

通过在循环外部实例化,可以创建对对象的一个引用

当遍历结果并设置属性时,您将反复使用相同的引用

每次迭代时添加到列表中的都是相同的引用,在循环结束时,该引用将引用包含结果集中最后一个值的对象


通过在循环中创建新对象,您可以创建新的引用-每个引用都指向一个新的源。您的循环现在写入一个新对象,并获得您想要的结果。

您不能在循环之外实例化对象以获得您想要的结果

这是因为对象将是引用类型

通过在循环外部实例化,可以创建对对象的一个引用

当遍历结果并设置属性时,您将反复使用相同的引用

每次迭代时添加到列表中的都是相同的引用,在循环结束时,该引用将引用包含结果集中最后一个值的对象


通过在循环中创建新对象,您可以创建新的引用-每个引用都指向一个新的源。您的循环现在写入一个新对象,并获得您想要的结果。

+1对于问题,因为主题是信息性的,标记看起来正确,并且一切都足够清楚,非VB.NET用户(即我)可以获得要点。+1对于问题,因为主题是信息性的,标记看起来正确,一切都很清楚,非VB.NET用户(即我)可以理解要点。