Extension Methods
Extension methods must live in a Module and be marked <Extension()>. The first parameter is the extended type.
In VB, extension methods can't be called on a late-bound Object variable.
Imports System.Runtime.CompilerServices
Public Module StringExtensions
<Extension()>
Public Function IsValidEmail(s As String) As Boolean
Return s IsNot Nothing AndAlso Text.RegularExpressions.Regex.IsMatch(s, "^[^@\s]+@[^@\s]+\.[^@\s]+$")
End Function
<Extension()>
Public Function Truncate(s As String, maxLength As Integer, Optional suffix As String = "...") As String
If String.IsNullOrEmpty(s) OrElse s.Length <= maxLength Then Return s
Return s.Substring(0, maxLength) & suffix
End Function
<Extension()>
Public Function WordCount(s As String) As Integer
Return s.Split({" "c}, StringSplitOptions.RemoveEmptyEntries).Length
End Function
<Extension()>
Public Iterator Function EveryOther(Of T)(source As IEnumerable(Of T)) As IEnumerable(Of T)
Dim i = 0
For Each item In source
If i Mod 2 = 0 Then Yield item
i += 1
Next
End Function
End Module
Console.WriteLine("[email protected]".IsValidEmail())
Console.WriteLine("A very long description".Truncate(10))
Console.WriteLine({1, 2, 3, 4, 5}.EveryOther().Count())