Создание общего метода для преобразования строки к nullable числам

Используйте функцию max() или используйте стиль FP:

reduce(lambda max, c: max if c <= max else c, [1, 6, 9, 2, 4, 0, 8, 1, 3])

6
задан Meta-Knight 19 June 2009 в 18:31
поделиться

2 ответа

Здесь идентичный вопрос (в 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
10
ответ дан 8 December 2019 в 18:40
поделиться

Как насчет:

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);
}
3
ответ дан 8 December 2019 в 18:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: