Используйте функцию max()
или используйте стиль FP:
reduce(lambda max, c: max if c <= max else c, [1, 6, 9, 2, 4, 0, 8, 1, 3])
Здесь идентичный вопрос (в C #): Преобразовать строку в тип, допускающий значение NULL (int, двойной и т.д ...)
Public Function ConvertString(Of T As Structure)(ByVal value As String) As System.Nullable(Of T)
Try
Return DirectCast(Convert.ChangeType(value, GetType(T)), T)
Catch
Return Nothing
End Try
End Function
Как насчет:
Public Shared Function Parse(Of T As Structure)(ByVal value As String) As T?
If String.IsNullOrEmpty(value) Then
Return Nothing
End If
Return New T?(DirectCast(TypeDescriptor.GetConverter(GetType(T)).ConvertFromInvariantString(value), T))
End Function
(обратите внимание, что я использовал рефлектор для перевода этого из C # ниже)
Вы можете добавить try / catch вокруг ConvertFromInvariantString
, но чтобы честно говоря, я бы предпочел, чтобы код генерировал исключение, если я дал ему что-то глупое - оставьте нули для пустого случая.
Преимущество этого заключается в том, что он работает с вашими собственными структурами, если вы связываете тип - конвертер с ними, что вы можете легко сделать (с атрибутом или во время выполнения).
public static T? Parse<T>(string value) where T : struct
{
if (string.IsNullOrEmpty(value)) return null;
return (T)TypeDescriptor.GetConverter(typeof(T))
.ConvertFromInvariantString(value);
}