Daily Archives: 2006/07/07

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. 

 

Workaround:
=====================

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
    Else
        Return Replace(Expression, Find, Replacement, Start, Count, Compare)
    End If
End Function


以上提供相關設計者參考。

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

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

%d 位部落客按了讚: