我对IConvertible
存在问题,简而言之:如果DateTimeOffset
已实施IConvertible
,我就不会有问题。
您无法使用扩展方法来实现接口,因此道路已关闭。结构DateTimeOffset不是部分的,因此不能以这种方式扩展。
在某些MSDN文档中阅读时,我遇到了TypeCode
枚举,这似乎是IConvertible正常工作所必需的。令我失望的是,枚举也没有包含TimeSpan,这使得Tuple
和DateTime
TimeSpan
类似DateTimeOffset
结构的选项结束(即[index,TType] where TType : IConvertible
= P)< / p>
我的问题如下:你如何实现一个具有基本的IConvertible或类似支持的DateTimeOffset等效?
该实现涉及使用ISuperConvertible
(包括setter,getters和try-getters)功能的花哨懒惰字典实现,并且它需要能够存储时区特定数据。
到目前为止我的想法:
创建一个新的IConvertible
界面,实际上只是DateTimeOffset
的扩展,并使DateTimeOffset
成为特例。这一般会打破我们的IConvertible支持,但对这个非常具体的案例起作用。优点和缺点?
使用两个“插槽”存储DateTime
s,一个用于int
,另一个用于cache[ApplicationStrings.LastUpdate, default : DateTimeOffset.Min]
半小时偏移(所有时区不是整个小时= /)。然后我们失去了DateTimeOffset
功能。
这些代表了我的主要想法,即中断IConvertible
并保持IConvertible
或中断DateTimeOffset
并保持{{1}}。
我仍然对C#的内在特性不熟悉,所以任何见解都会有所帮助。你有什么想法?
编辑: 加法:
答案 0 :(得分:0)
您可以在DateTimeOffset上创建自己的包装器类,它将实现IConvertible。 此类将具有DateTimeOffset属性,您将将其用于包装器属性和方法。并为它实现IConvertible的方法。 例如:
public class DTOffset:IConvertible
{
private DateTimeOffset DateTimeOffset;
//Implementation of IConvertible
public long ToInt64(IFormatProvider provider)
{
return DateTimeOffset.Ticks;
}
public DateTime ToDateTime(IFormatProvider provider)
{
DateTimeOffset.DateTime;
}
//and so on
//wrapper properites of DateTimeOffset:
public int DayOfYear{get{return DateTimeOffset.DayOfYear;}}
public DateTime Date{get{return DateTimeOffset.Date;}}
//and so on
}