как использовать TypeConverters для преобразования System.Datetime в пользовательский тип
-
07-07-2019 - |
Вопрос
По какой-то причине мне нужно привести / преобразовать DateTime
в один из множества пользовательских объектов
Оказывается, это очень сложно сделать в общем виде.
Я думаю о реализации метода расширения для объекта или, возможно, расширения DateTimeConverter
.
Но тогда каков будет общий способ справиться с этим, у меня есть объект и тип назначения, и в данный момент я использую System.ConvertTo (..)
, но это явно ограничено, потому что он поддерживает только преобразование в типы .NET и не может быть расширен.
Есть идеи?
Решение
Вы можете добавить конструктор для вашей TimeStamp, который принимает DateTime в качестве параметра.
public class TimeStamp
{
public TimeStamp(DateTime dateTime, ...)
{
// Your code here to convert from dateTime to TimeStamp
}
}
Потом позже ...
DestType Convert<DestType>( Object linqResult )
{
DestType result;
if( linqResult is DateTime && DestType is TimeStamp )
{
DateTime dbTime = linqResult as DateTime;
result = new TimeStamp( dbTime );
}
...
return result;
}
Вы могли бы даже расширить это с помощью всевозможных отражений, конструкторов и т. д. Но если вы хотите основать один объект на другом (например, отметку времени из даты), конструктор кажется естественным.
Надеюсь, это поможет, TJB