为什么数组中的值保留在 while 循环中? (VB.NET)

2024-03-28

如果我在该行放置一个断点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(使用前将#替换为@)

为什么数组中的值保留在 while 循环中? (VB.NET) 的相关文章

随机推荐