如果我在 currentrow = MyParser.ReadFields()
行放置一个断点,currentrow 仍然包含从文件解析的上一行的值。之后currentrow = MyParser.ReadFields()
执行时,存储当前文件行值。
由于 currentrow 是在 While 循环内声明的,因此重新进入 While 循环时,前一个 currentrow 值是否应该超出范围?为什么 currentrow 仍然保留文件中最后一行的值?
我需要改变Dim currentrow As String()
至Dim currentRow() = New String() {}
?为什么?
If File.Exists(filename) Then
Using MyParser As New FileIO.TextFieldParser(filename)
MyParser.TextFieldType = FileIO.FieldType.Delimited
MyParser.SetDelimiters("~")
While Not MyParser.EndOfData
Try
Dim currentrow As String()
'at this point, currentrow still contains prev values
currentrow = MyParser.ReadFields()
Catch
End Try
End While
End Using
End If
最佳答案
因为您只声明了循环变量,而这会在每次迭代时产生正确的 Nothing
值:
Dim currentrow As String() = Nothing
甚至更好
Dim currentrow As String() = MyParser.ReadFields()
“Dim”本身,如果没有显式初始化,将被优化为冗余。
即使您分配 Nothing
,它在每次迭代时也始终会重置为 Nothing
。如果您只声明变量,即使您之后使用 Console.Write
或 MessageBox.Show
,它也将始终包含“错误”的旧值。
因此,请始终在循环变量中分配默认值以避免副作用。
旁注 C# 通过 compiler warning CS0165 避免了此错误源。 :使用未分配的局部变量“variablename”。
因此,如果您在分配变量之前尝试使用该未分配的变量,您甚至无法使用 C# 进行编译。我不知道为什么 VB.NET 允许这样做。
关于asp.net - 为什么 while 循环中保留数组中的值? (VB.NET),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13259999/