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用户(即我)可以理解要点。