VBNET Replace(“", vbLf, vbNewLine) 傳回 Nothing

在 VB6/VBA/VBScript 中,
Replace("", vbLf, vbNewLine) 會傳回零長度字串,也就是 "" ,在 VB2005 會傳回 Nothing ,導致後續處理引發錯誤。
依據 VB2003 線上手冊寫說會傳回 "":
在 VB2005 線上手冊寫說會傳回 Nothing:
所以就發個信問 CSS ,問題代號為 SRT060707777209 。
經過 CSS 回覆,VB2003 線上手冊是錯誤的,此問題為設計上的變更。
CSS 回覆摘錄如下:

原因:  This is by design. 因為從 VB.NET 2003 之後的 Replace 函數的 behavior 已經變更。
經過確認過,從 VB.NET 2003 之後的 Replace 函數的 behavior 已經變更,以往已經有人反應過此問題,但是 production team 的回應,目前不會修復此問題。我仍然會把此問題 feedback 給我們的 production team。
1. We could not simply fix the bug since it may break existing customer code in Visual Studio 2003 and 2005.
2. We could not implicitly version the Replace function. 



The workaround for this issue is by implementing a different replace method and using it instead of the replace function in string class as follows. 
Public Function MyReplace( _
    ByVal Expression As String, ByVal Find As String, ByVal Replacement As String, _
    Optional ByVal Start As Integer = 1, Optional ByVal Count As Integer = -1, _
    <Microsoft.VisualBasic.CompilerServices.OptionCompareAttribute()> _
    Optional ByVal [Compare] As CompareMethod = CompareMethod.Binary) As String

    If Not Expression Is Nothing AndAlso Expression.Length = 0 Then
        Return String.Empty
        Return Replace(Expression, Find, Replacement, Start, Count, Compare)
    End If
End Function


Categories: 更新與回報 | 1 則迴響


One thought on “VBNET Replace(“", vbLf, vbNewLine) 傳回 Nothing

  1. 子璉

    剛剛收到通知,說這個問題是 bug ,是屬於 VS2003 設計時的錯誤,這個問題直到今年三月才收到客戶反應,由於這個行為錯誤變更,歷時長久,故為保障後續開發的程式不致因此行為變更導致錯誤發生,故在 VS2005 及後續版本將視為預設行為,換句話說,就是不修了。
    使用者可參考上面函數來處理,或是改用 .Net framework 類別處理。
    CStr("").Replace(vbLf, vbNewLine)

    Core team explained why they resolved this bug to be "Won’t Fix" and update VS2003 and VS2005 documentations as following (in bug 583754):

    2006/3/14 上午 05:40 Resolved as Won’t Fix by huynThis is a bug in VB .NET Runtime, unfortunately it was not discovered until the beginning of Visual Studio 2005 with VSWhidbey 169341. The original bug was closed as Won’t Fix because:- We could not simply fix the bug since it may break existing customer code in Visual Studio 7.0 and 2003.- We could not implicitly version the Replace function.
    VS 2003 documentation needs to be updated: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vblr7/html/vafctreplace.asp
    VS 2005 documentation is up-to-date: http://msdn2.microsoft.com/en-us/library/bt3szac5.aspx



WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )


您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

在 WordPress.com 建立免費網站或網誌.

%d 位部落客按了讚: