List.Add 正在替换索引 0 而不是添加到下一个位置。为啥?
Posted
技术标签:
【中文标题】List.Add 正在替换索引 0 而不是添加到下一个位置。为啥?【英文标题】:List.Add is replacing index 0 instead of adding to the next position. Why?List.Add 正在替换索引 0 而不是添加到下一个位置。为什么? 【发布时间】:2021-12-24 23:11:23 【问题描述】:我正在使用 ASP.NET 和 Visual Basic 制作一个自定义表单,用于填写信息。单击按钮后,将调用一个函数,该函数从该表单中获取位信息,将它们放入一个对象中,然后将该对象添加到列表中。这被用于一种排队输入系统,因此表单将被多次编辑和提交。
由于某种原因,它没有在列表的下一个索引位置添加新对象,而是替换了 0 处的任何内容。因此,当时列表中只有一个对象。
这是自定义表单:
这是我的自定义对象,目前位于我的 _Default 类之上:
Public Class QueueItem
Public Property _TestName As String
Public Property _ValueID As String
Public Property _MathOperator As String
Public Property _ValueInput As Integer
Public Sub New()
End Sub
Public Sub New(ByVal TestName As String, ByVal ValueID As String, ByVal MathOperator As String, ByVal ValueInput As Integer)
_TestName = TestName
_ValueID = ValueID
_MathOperator = MathOperator
_ValueInput = ValueInput
End Sub
End Class
该列表在我的 Page_Load 函数上方、_Default 类中声明,并且是公共的。这是该列表的定义:
Public QueueList As List(Of QueueItem) = New List(Of QueueItem)()
而且,按下“添加到队列”按钮时会调用以下内容:
Protected Sub AddToQueueButton_Click(sender As Object, e As EventArgs) Handles AddToQueueButton.Click
'Adds a new QueueItem to the QueueList
'Values pulled from the dropdown lists in the custom form
QueueList.Add(New QueueItem() With
._TestName = TestName.SelectedValue,
._ValueID = ValueID.SelectedValue,
._MathOperator = MathOperator.SelectedValue,
._ValueInput = ValueInput.Text
)
'Below section is for testing
Dim test1 As String = QueueList(0)._TestName
Dim test2 As String = QueueList(0)._ValueID
Dim test3 As String = QueueList(0)._MathOperator
Dim test4 As String = QueueList(0)._ValueInput
Dim testmessage As String = test1 + " | " + test2 + " | " + test3 + " | " + test4
Dim count = QueueList.Count
Dim capacity = QueueList.Capacity
Response.Write("<script language='javascript'>alert('" + testmessage + "');</script>")
End Sub
所以,如您所见,我有一些测试变量和东西,我正在使用它们来确保它正常工作。每次调用它时,都会将一个对象添加到列表中,我会查看列表的计数和容量,并在警报中显示所有信息。
警报的此信息始终从索引 0 读取。因此,我向列表添加信息多少次都无关紧要,0 应该保持不变,对象应该添加到 1,然后是 2,然后很快。对吧?
好吧,每当我提交新信息时,都会发生 0 次更改,并且计数或容量都不会超过第一个条目。它们总是显示为好像列表中只有一项。
这是我两次运行队列输入表单,最后有两个不同的数字:
第一次运行:
第二次运行:
因为我总是从索引 0 读取,所以最后的数字不应该改变。它应该给我与索引 0 处的对象关联的数字。而且,List.Add 函数应该使计数和容量增加。但是,这一切都没有发生。相反,它似乎正在替换 0 时的内容。
如果有人对如何解决此问题有任何提示,或者可以提示我可能会发生什么,将不胜感激。
【问题讨论】:
公共属性以下划线开头是非常不寻常的。为什么忽略带参数的构造函数? @LarsTech 我复制了一些代码,并遵循了该约定。老实说,我并不完全理解创建新对象并为其添加参数应该如何工作。这就是我展示对象类的原因,因为如果存在错误,我可能需要知道这一点。感谢您的评论! 【参考方案1】:每次向您的页面发出请求时,都会创建一个新的类实例来处理该请求。对于回发请求,可能会加载一些数据——例如,发布到服务器的字段的值,以及存储在ViewState
中的任何内容。但是存储在页面字段中的数据不会跨请求保留。
代码没有替换索引0
处的项目;这是添加一个项目到一个空列表。
您需要以某种方式在请求之间保留您的列表。您可以将其存储在Session
中,也可以将其放在ViewState
中。
【讨论】:
啊,有道理!谢谢您的回答!我一定会试一试,如果有其他东西爆炸,我会回来的。以上是关于List.Add 正在替换索引 0 而不是添加到下一个位置。为啥?的主要内容,如果未能解决你的问题,请参考以下文章