如果我在该行放置一个断点currentrow = MyParser.ReadFields()
,currentrow 仍然包含从文件解析的上一行的值。后currentrow = MyParser.ReadFields()
执行时,存储当前文件行值。
由于 currentrow 是在 While 循环内声明的,因此重新进入 While 循环时,前一个 currentrow 值不应该超出范围吗?为什么 currentrow 仍然保留文件中最后一行的值?
我需要改变吗Dim currentrow As String()
to Dim currentRow() = New String() {}
? Why?
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
or MessageBox.Show
然后。
因此,请始终在循环变量中分配默认值以避免副作用。
SidenoteC# 通过以下方式避免了此错误源编译器警告 CS0165 http://msdn.microsoft.com/en-us/library/4y7h161d%28v=vs.80%29.aspx: 使用未分配的局部变量“variablename”.
因此,如果您在分配变量之前尝试使用该未分配的变量,您甚至无法使用 C# 进行编译。我不知道为什么 VB.NET 允许这样做。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)