gro*_*it1 15 vb.net foreach loops list
我有一个名单,NeededList我需要检查此列表中的每个项目,看看它是否存在于我的数据库中.如果它确实存在于数据库中,我需要将其从列表中删除.但是当我迭代它时,我无法更改列表.我怎样才能做到这一点?
到目前为止,这是我的代码:
For Each Needed In NeededList
Dim Ticker = Needed.Split("-")(0).Trim()
Dim Year = Needed.Split("-")(1).Trim()
Dim Period = Needed.Split("-")(2).Trim()
Dim Table = Needed.Split("-")(3).Trim()
Dim dr As OleDbDataReader
Dim cmd2 As New OleDb.OleDbCommand("SELECT * FROM " & Table & " WHERE Ticker = ? AND [Year] = ? AND Period = ?", con)
cmd2.Parameters.AddWithValue("?", Ticker)
cmd2.Parameters.AddWithValue("?", Year)
cmd2.Parameters.AddWithValue("?", Period)
dr = cmd2.ExecuteReader
If dr.HasRows Then
NeededList.Remove(Needed)
End If
Next
Run Code Online (Sandbox Code Playgroud)
Ste*_*eve 34
不,你不能使用for each,但你可以使用旧式for循环来做到这一点.
诀窍是从结束开始并向后循环.
For x = NeededList.Count - 1 to 0 Step -1
' Get the element to evaluate....
Dim Needed = NeededList(x)
.....
If dr.HasRows Then
NeededList.RemoveAt(x)
End If
Next
Run Code Online (Sandbox Code Playgroud)
您需要以这种方式接近循环,因为您不会有跳过元素的风险,因为当前的元素已被删除.
例如,假设您删除集合中的第四个元素,之后,第五个元素成为第四个元素.但随后索引器上升到5.这样,前一个第五个元素(现在位于第四个位置)永远不会被评估.当然,您可以尝试更改索引器的值,但这总是在错误的代码和等待发生的错误中结束.
Hen*_*man 14
安全起见并制作副本ToList():
For Each Needed In NeededList.ToList()
Dim Ticker = Needed.Split("-")(0).Trim()
...
If dr.HasRows Then
NeededList.Remove(Needed)
End If
Next
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36470 次 |
| 最近记录: |