Dim Ali As Object = "Ali"
Dim age = 16
Dim x As String = "Students: ".CrLf.
str("Name: ").arg(Ali, -5).
str(", Age: ").arg(age, 7, "N2").CrLf.
str("Name: ").arg("Yaser").
str(", Age: ").arg(20, 7, "N2")
or
Dim Ali As Object = "Ali"
Dim age = 16
Dim x As String = "Students: ".CrLf _
add("Name: ", Ali, -5).
add(", Age: ", age, 7, "N2").CrLf.
add("Name: ", "Yaser").
add(", Age: ", 20, 7, "N2")
or
Dim Ali As Object = "Ali"
Dim age = 16
Dim x As String = "Students: ".CrLf _
("Name: ", Ali, -5)(", Age: ", age, 7, "N2").CrLf _
("Name: ", "Yaser")(", Age: ", 20, 7, "N2")
Public Class Joiner
Dim sb As New StringBuilder
Dim handler As New StringBuilder.AppendInterpolatedStringHandler(100, 5, sb)
Public Function add(s As String) As Joiner
sb.Append(s)
Return Me
End Function
Public Function add(Of T)(obj As T, Optional alignment As Integer = 0, Optional format As String = "") As Joiner
handler.AppendFormatted(obj, alignment, format)
Return Me
End Function
Public Function add(Of T)(str As String, obj As T, Optional alignment As Integer = 0, Optional format As String = "") As Joiner
sb.Append(str)
handler.AppendFormatted(obj, alignment, format)
Return Me
End Function
Public Function str(s As String) As Joiner
sb.Append(s)
Return Me
End Function
Public Function arg(Of T)(obj As T, Optional alignment As Integer = 0, Optional format As String = "") As Joiner
handler.AppendFormatted(obj, alignment, format)
Return Me
End Function
Public Function CrLf() As Joiner
sb.Append(vbCrLf)
Return Me
End Function
Default Public ReadOnly Property adding(s As String) As Joiner
Get
sb.Append(s)
Return Me
End Get
End Property
Default Public ReadOnly Property adding(obj As Object, Optional alignment As Integer = 0, Optional format As String = "") As Joiner
Get
handler.AppendFormatted(obj, alignment, format)
Return Me
End Get
End Property
Default Public ReadOnly Property adding(str As String, obj As Object, Optional alignment As Integer = 0, Optional format As String = "") As Joiner
Get
sb.Append(str)
handler.AppendFormatted(obj, alignment, format)
Return Me
End Get
End Property
Public Overrides Function ToString() As String
Return sb.ToString()
End Function
Public Shared Widening Operator CType(j As Joiner) As String
Return j.ToString()
End Operator
End Class
Imports System.Runtime.CompilerServices
Public Module ParsingExtensions
<Extension()>
Public Function CrLf(input As String) As Joiner
Dim j As New Joiner
Return j.Add(input).Add(vbCrLf)
End Function
<Extension()>
Public Function add(input As String, s As String) As Joiner
Dim j As New Joiner
Return j.Add(input).Add(s)
End Function
<Extension()>
Public Function add(Of T)(input As String, obj As T, Optional alignment As Integer = 0, Optional format As String = "") As Joiner
Dim j As New Joiner
Return j.Add(input).Add(obj, alignment, format)
End Function
<Extension()>
Public Function add(Of T)(input As String, str As String, obj As T, Optional alignment As Integer = 0, Optional format As String = "") As Joiner
Dim j As New Joiner
Return j.Add(input).Add(str).Add(obj, alignment, format)
End Function
<Extension()>
Public Function str(input As String, s As String) As Joiner
Dim j As New Joiner
Return j.Add(input).Add(s)
End Function
<Extension()>
Public Function arg(Of T)(input As String, obj As T, Optional alignment As Integer = 0, Optional forma As String = "") As Joiner
Dim j As New Joiner
Return j.Add(input).Add(obj, alignment, forma)
End Function
End Module