添加新的字符串对象方法

时间:2013-05-12 22:41:40

标签: asp.net vb.net string overloading

我有这个代码行:

newUrl = Request.RawUrl.ToString.Replace(Server.UrlEncode(category), "")

当category =""我收到错误: 字符串长度不能为零。 参数名称:oldValue

所以我想添加一个新的替换方法,除了空字符串作为要替换的参数之外。 我不想检查类别是否为空字符串,因为检查需要经常发生并且会使我的代码过于复杂。 所以我想添加一个方法" ReplaceNew"或超载"替换" String对象的方法,带有一个额外的参数" ignoreEmptyValue"。

我试过了:

Public Module CustomMethods

Public Function ReplaceEx(original As String, pattern As String, replacement As String) As String
    If [String].IsNullOrEmpty(pattern) Then
        Return original
    Else
        Return original.Replace(pattern, replacement)
    End If
End Function
End Module

Public Class GlobalFunctions

Public Shared Function ReplaceEx(original As String, pattern As String, replacement As String) As String
    If [String].IsNullOrEmpty(pattern) Then
        Return original
    Else
        Return original.Replace(pattern, replacement)
    End If
End Function
End Class

然后我尝试了:

newUrl = Request.RawUrl.ToString.ReplaceEx(Server.UrlEncode(category), "")

但是这样的ReplaceEx方法不可用,我得到错误:

' ReplaceEx'不是' String'的成员。

我真的希望在String对象上使用ReplaceEx方法,因为我不想重构我的代码,而是用.ToString.ReplaceEx方法替换所有.ToString.Replace方法。 我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

你可以这样做:

public static string ReplaceEx(this string original, string pattern, string replacement)
{
    if (String.IsNullOrEmpty(pattern))
        return original;
    else
        return original.Replace(pattern, replacement);
}

并使用ReplaceEx代替Replace作为

newUrl = Request.RawUrl.ToString.ReplaceEx(Server.UrlEncode(category), "")

答案 1 :(得分:0)

这是为了让它发挥作用:

Module MyExtensions
<Extension()>
Public Function ReplaceEx(ByVal original As String, ByVal pattern As String, ByVal replacement As String) As String
    If [String].IsNullOrEmpty(pattern) Then
        Return original
    Else
        Return original.Replace(pattern, replacement)
    End If
End Function
End Module

确保此行位于代码中:

Imports System.Runtime.CompilerServices