Is there a way to do so?
Dim valueNothing = ConvertHelper.SafeChangeType(Of Boolean)(Nothing)
Dim valueTrue = ConvertHelper.SafeChangeType(Of Boolean)(True)
Dim valueFalse = ConvertHelper.SafeChangeType(Of Boolean)(False)
' ...
Class ConvertHelper
Shared Function SafeChangeType(Of T As Structure)(ByVal value As Object) As T?
Return If(value Is Nothing, Nothing, DirectCast(Convert.ChangeType(value, GetType(T)), T?))
End Function
End Class
Why it throws an exception?
Due to Convert.ChangeType
method implementation:
if( value == null ) {
if(conversionType.IsValueType) {
throw new InvalidCastException(Environment.GetResourceString("InvalidCast_CannotCastNullToValueType"));
}
return null;
}