2015-08-08 56 views
0

這是一個非常簡單的問題。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

回答

1

隨着你有什麼,你正在讀取整個文件到內存兩次。這太瘋狂了。

此外,你不需要在這裏檢查.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

哇,這太神奇了。 –

相關問題