2015-01-06 195 views
0

我試圖替換文件中的所有雙引號,但是當我嘗試更新字符串數組時,我只是再次獲取原始行而不是清理後的字符串。 (ReplaceQuotes函數中的布爾值僅用於測試,當有一個「在線」時它們會恢復正常)如果我查看cleanLine字符串,引號已被刪除,但是當我返回fileContent數組時,它看起來就是想當初用引號。字符串數組替換不更新原始字符串

Private Sub CleanFile(currentFileInfo As FileInfo) 
    Dim fullName As String = currentFileInfo.FullName 
    Dim fileContent As String() = GetFileContent(currentFileInfo.FullName) 
    Dim cleanFileContent As String() = ReplaceQuotes(fileContent) 
End Sub 

Private Function GetFileContent(fileName As String) As String() 
    Return System.IO.File.ReadAllLines(fileName) 
End Function 

Private Function ReplaceQuotes(fileContent As String()) 

    For Each line As String In fileContent 
     Dim cleanLine As String 
     Dim quoteTest As Boolean 
     quoteTest = line.Contains("""") 
     Dim quoteTest2 As Boolean = line.Contains(ControlChars.Quote) 
     cleanLine = line.Replace(ControlChars.Quote, "") 
     line = cleanLine 
    Next 

    Return fileContent 

End Function 
+0

字符串是不可變的,你必須重新分配它在你的數組。 –

+0

爲初學者打開Option Strict,你的函數只是返回它傳遞的東西而不是處理後的數據; 'return fileContent'就是傳遞給它的東西。 – Plutonix

+0

@ DanielA.White:這與字符串的不變性無關,而與變量和它們引用的對象之間的差異有關。 'line'只是一個引用數組中字符串的局部變量。通過重新爲該變量分配一個新字符串,您不會更改該數組。 –

回答

2

你有原始數組中重新分配新的字符串,而不是取代當地字符串變量。因此,你不能用一個For Each但只有For -loop。和方法可以更短:

Private Sub ReplaceQuotes(fileContent As String()) 
    For i As Int32 = 0 To fileContent.Length - 1 
     fileContent(i) = fileContent(i).Replace(ControlChars.Quote, "") 
    Next 
End Sub 
+0

它工作。正是我想要做的(但你的實際工作)現在有道理,我沒有意識到行變量只是對字符串的引用而不是實際的字符串本身。謝謝你的幫助。 – Dave