|
デリゲートの概念というよりもうちょっと外側の方の話になりそうですが。
置換式が別関数化するほど複雑でないのなら、ラムダ式を使うことで解決できます。
ラムダ式内では、式外の変数を「キャプチャ」して使うことができます。
Dim idx As Integer = 1
' mの型はRegex.Replaceの定義から推論してくれるので省略
Regex.Replace(text, exp, Function (m)
If idx < 0 Then
Return "-" & m.Value
Else
Return "+" & m.Value
End If
End Function)
置換式を関数化しておきたいのなら、クラス化する必要があるでしょう。
Class IndexReplacer
Public Sub New(idx As Integer)
_idx = idx
End Sub
Private _idx As Integer
Public Function Match(m As Match) As String
If _idx < 0 Then
Return "-" & m.Value
Else
Return "+" & m.Value
End If
End Function
End Class
' 使う時はこんな感じ
Dim replaced As String = Regex.Replace(text, exp, AddressOf New IndexReplacer(4).Match)
|