VB如何使用迭代将项添加到类列表?

问题描述:

这是一个非常简单的问题。VB如何使用迭代将项添加到类列表?

我想从.txt文件添加项目到库存类列表。但是我不能用这个词“新”在这一行,否则它给一个语法错误: 新的库存(“棒”,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 

我如何去了解这个??? 谢谢。

+0

它应该是那么容易,因为添加简单'yield'声明:'产新清单(” Rod“,1,50)';) – Carsten

+0

这会返回一个错误:'没有声明收益。由于其保护级别,可能无法访问'。尽管如此,感谢您的快速响应。 –

+0

你并不是在限制你从文件中读取的内容,所以你可以将它添加到你返回的列表中。如果该方法打算添加到现有列表中,则返回'newList.ToArray()',以便您可以使用AddRange返回 – Plutonix

随着你有什么,你正在读取整个文件到内存两次。这太疯狂了。

此外,你不需要在这里检查.Exists()。文件系统是易失性,这意味着当您检查.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 
+0

哇,这太神奇了。 –