【问题标题】:VB How do I add items to a class list using iteration?VB 如何使用迭代将项目添加到类列表中?
【发布时间】:2015-10-31 20:12:04
【问题描述】:

这是一个非常简单的问题。

我正在尝试将项目从 .txt 文件添加到 Inventory 类列表。但是我不能在这一行中使用“新”这个词,否则会出现语法错误: 新库存(“棒”,1)

Function GetInventory() As IEnumerable(Of Inventory)
    If System.IO.File.Exists(loc) = True Then
        If System.IO.File.ReadAllText(loc).Count > 0 Then
            Dim file As System.IO.StreamReader
            file = My.Computer.FileSystem.OpenTextFileReader(loc)
            Do While file.Peek() >= 0
                New Inventory("Rod", 1)
            Loop

            Return New Inventory

            file.Close()
        End If
    End If

End Function

我该怎么办??? 谢谢。

【问题讨论】:

  • 应该像添加yield 语句一样简单:yield new Inventory("Rod", 1, 50) ;)
  • 这会返回错误:'未声明产量。由于其保护级别,它可能无法访问。不过,感谢您的快速响应。
  • 您没有限定从文件中读取的内容,因此您可以将其添加到您返回的列表中。如果该方法旨在添加到现有列表,请返回 newList.ToArray(),以便您可以使用 AddRange 返回
  • 不要进行.Exists() 检查。如果异常失败,只需处理异常。此外,这个函数可能是处理异常的错误位置......这意味着您可以完全摆脱这里的错误检查。
  • 您使用的是什么版本的 vb.net? yield 应该在那里 since 2012

标签: vb.net list class


【解决方案1】:

有了你所拥有的,你将整个文件读入内存两次。太浪费了

此外,您不需要在此处检查 .Exists()。文件系统是volatile,这意味着在您检查.Exists() 和您尝试访问该文件之间,该文件可能不再可用。当文件不存在时,一个好的程序仍然会有一个好的异常处理程序,现在你有一个异常处理程序,.Exists() 检查只是多余的。它并没有为您节省您可能认为的性能损失。此外,此方法可能是处理异常的错误位置。这通常最好在调用代码中的某个地方执行,这意味着您可以在此处完全跳过错误检查。

您可以将整个方法简化为一条语句,从而将您的执行时间缩短一半:

Function GetInventory(ByVal loc As String) As IEnumerable(Of Inventory)
    Return IO.File.ReadLines(loc).Select(Function(i) New Inventory(i, 1))
End Function

【讨论】:

    猜你喜欢
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 2017-07-14
    相关资源
    最近更新 更多