Как преобразовать строку в тип, допускающий значение NULL, который определяется во время выполнения?

У меня есть приведенный ниже код, и мне нужно преобразовать строку к типу, который также указан в String:

 Type t = Type.GetType("System.Nullable`1[[System.DateTime, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]");

            object d = Convert.ChangeType("2012-02-23 10:00:00", t);

Я получаю следующее сообщение об ошибке:

Invalid cast from 'System.String' to 'System.Nullable`1[[System.DateTime, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]'.

Как это возможно?

Я знаю один уродливый способ - проверить, допускает ли тип значение NULL, используя if:

    Type possiblyNullableType = Type.GetType("System.Nullable`1[[System.DateTime, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]");

    var underlyingType = Nullable.GetUnderlyingType(possiblyNullableType);

    Object result;

    // if it's null, it means it wasn't nullable
    if (underlyingType != null)
    {
        result = Convert.ChangeType("2012-02-23 10:00:00", underlyingType);
    }

Что может быть лучше?

Спасибо,

16
задан The Light 24 February 2012 в 09:42
поделиться

1 ответ

Что-то вроде этого? Если вам действительно не нужно делать это динамически.

if (string.IsNullOrEmpty(input))
{
   return new DateTime?();
}
else
{
   return new DateTime?(DateTime.Parse(input));
}

Возможно, вы могли бы проверить, является ли ваш тип одним из типов «nullable», а затем, возможно, вы найдете здесь что-то полезное:

Преобразовать строку в тип nullable (int, double и т.д ...)

1
ответ дан 30 November 2019 в 16:07
поделиться
Другие вопросы по тегам:

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