Public Class ObjectEx
    ''' <summary>
    ''' Checks a value for three different `null` values,
    ''' Nothing, Empty String, DBNull
    ''' 
    ''' Returns the original value if the value is not null, or `defaultValue`
    ''' </summary>
    ''' <typeparam name="T">The type of the value</typeparam>
    ''' <param name="value">The value</param>
    ''' <param name="defaultValue">The default Value</param>
    ''' <returns>The original value or the default value</returns>
    Public Shared Function NotNull(Of T)(ByVal value As T, ByVal defaultValue As T) As T
        If IsNothing(value) OrElse String.IsNullOrEmpty(value.ToString) OrElse IsDBNull(value) Then
            Return defaultValue
        Else
            Return value
        End If
    End Function

    ''' <summary>
    ''' Converts a String value to the given Enum
    ''' </summary>
    ''' <typeparam name="T">The Enum Type</typeparam>
    ''' <param name="value">The string value to convert</param>
    Public Shared Function ToEnum(Of T)(value As String) As T
        Return [Enum].Parse(GetType(T), value)
    End Function

    ''' <summary>
    ''' Converts an Integer value to the given Enum
    ''' </summary>
    ''' <typeparam name="T">The Enum Type</typeparam>
    ''' <param name="value">The integer value to convert</param>
    Public Shared Function ToEnum(Of T)(value As Integer) As T
        Return [Enum].ToObject(GetType(T), value)
    End Function

    ''' <summary>
    ''' Converts a Long value to the given Enum
    ''' </summary>
    ''' <typeparam name="T">The Enum Type</typeparam>
    ''' <param name="value">The long value to convert</param>
    Public Shared Function ToEnum(Of T)(value As Long) As T
        Return [Enum].ToObject(GetType(T), value)
    End Function
End Class
