я создаю универсальный конвертерНевозможно изменить тип для NULLABLE в родовом методе
Вот пример кода общего преобразователя
bool TryReaderParse<TType>(object data, out TType value)
{
value = default(TType);
Type returnType = typeof(TType);
object tmpValue = null;
if (returnType == typeof(DateTime))
{
tmpValue = StringToDatetime(data.ToString());
}
else if (returnType == typeof(DateTime?)) // THIS IF FIRES
{
tmpValue = StringToNullableDatetime(data.ToString());
}
value = (TType)Convert.ChangeType(tmpValue, returnType); // THROWS
}
public DateTime? StringToNullableDatetime(string date)
{
DateTime? datetime = null;
if (!string.IsNullOrEmpty(date))
{
datetime = DateTime.Parse(date, new CultureInfo(Resources.CurrentCulture));
}
return datetime;
}
И это, как я использую его:
void foo()
{
DateTime? date = null;
TryReaderParse<DateTime?>("25/12/2012", out date);
}
Исключенное исключение говорит, что оно не может конвертировать из DateTime
в Nullable<DateTime>
. Поскольку метод создает и возвращает тип с нулевым значением, как происходит сбой кастинга?
В конце я хочу, чтобы в этом конкретном примере с нулевым значением DateTime.
редактировать Проблема заключается в том, что StringToNullableDatetime
метод возвращает Datetime?
и отливка говорит, что не может конвертировать из Datetime
Поскольку метод StringToNullableDatetime
возвращает обнуляемого DateTime, как это возможно, что Convert.ChangeType
не может видеть, что прошло аргумент является нулевым?
Ps. Я читал ответы, например, this, которые делают противоположное (отличное от нуля).
отредактировал мой вопрос. Моя проблема в том, что я не могу вернуть Nullable datetime. Строка 'Convert.ChangeType' не может видеть, что переданный аргумент является нулевым. – Odys