我使用一个循环条件来检查列中是否有空值,然后将其删除。
-Original author
[STart:]
For i As Integer = counter To dt1.Columns.Count - 1
For x As Integer = 0 To dt1.Rows.Count - 1
if some condition then
something = true
else
something = false
counter = counter + 1
Goto [Start]
end if
Next
If something = true
dt1.Columns.Remove(dt1.Columns(i))
i -= 1
End If
Next
End If
有时它可以正确运行,有时即使当i
变得大于(dt.columns.count - 1)
时,它仍然会执行for循环并抛出一个错误,即没有具有该索引的列。
你们发现这个代码有什么问题吗?
4条答案
按热度按时间t9eec4r01#
语句
dt1.Columns.Count
在for循环的最开始被求值。它不会在每次循环运行时重新求值。所以当你在循环体中删除一个列时,它会导致循环的结束条件出错。
uidvcgyl2#
我猜i-loop只计算一次停止值。
y0u0uwnf3#
改变循环对象是个坏主意。这可能在某些情况下会有影响。我会在第一个表上复制你的datatable循环,然后改变第二个表。
另外,你看过Select method on datatable吗?它可能比嵌入式循环(在列上循环并调用select)更容易搜索空值。
7kqas0il4#
由于您是在外部循环中进行删除,因此不要依赖于dt1.Columns.Count的重新求值
此外,尝试倒计时而不是倒计时(因为如果您在倒计时中删除了一列,它不会影响下一个有效索引)
对于你的外部循环,类似这样:
警告:我是一个c#开发人员,我的vb for循环语法可能会关闭读取:我想从最高的列号向下循环到列
这倒过来更好,你可以这样想:假设我有4列,我在#3上,如果#3不为空,我就不去管它,下一列是#2如果#3为空,我就删除它,但是下一列仍然是#2,当我得到0时,我仍然完成了。