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

标签 asp.net vb.net parsing file-io

如果我在 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.WriteMessageBox.Show,它也将始终包含“错误”的旧值。

因此,请始终在循环变量中分配默认值以避免副作用。

旁注 C# 通过 compiler warning CS0165 避免了此错误源。 :使用未分配的局部变量“variablename”

因此,如果您在分配变量之前尝试使用该未分配的变量,您甚至无法使用 C# 进行编译。我不知道为什么 VB.NET 允许这样做。

关于asp.net - 为什么 while 循环中保留数组中的值? (VB.NET),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13259999/

相关文章:

c# - 阻止 ASP.NET 中的整数溢出

asp.net - 在页面加载时将项目添加到列表框,并在单击按钮时将项目传输到另一个列表框

parsing - 词法分析器如何提取模棱两可的语言中的标记?

c# - "Type is not cls-compliant"某些地方有警告,但其他地方没有警告

vb.net - 如何用vb在outlook中创建约会?

java - 解析给定名称标签的 XML 子节点?

linux - getopt_long 没有按预期工作

html - ASP 解析器错误 "not a valid identifier"

javascript - Window.Open 使用 PDF 流而不是 PDF 位置

asp.net - 联合身份验证和 "Error occurred during a cryptographic operation"