我有一個問題IConvertible
,簡而言之:如果DateTimeOffset
實施IConvertible
我不會有問題。實現類似於非可修改類型的功能
不能使用擴展方法來實現一個接口,使這條道路被關閉。 struct DateTimeOffset不是部分的,所以不能以這種方式擴展。
當讀到一些MSDN文檔時,我碰到了TypeCode
枚舉,這似乎是IConvertible正常工作所需要的。而令我失望的枚舉不包含任何時間跨度,其封閉使用Tuple
狀結構DateTime
和TimeSpan
(即DateTimeOffset
= P)
我的問題是如下的選項:你將如何實現一個DateTimeOffset-具有基本的IConvertible或類似支持的等價物?
該實現涉及一個花式懶惰字典實現[index,TType] where TType : IConvertible
(包括setter,getter和try-getters)功能,它需要能夠存儲特定於時區的數據。
我的想法而已:
創建一個新的
ISuperConvertible
接口,這在現實中只是一個擴展IConvertible
並DateTimeOffset
一個特例。這一般會打破我們對IConvertible的支持,但是爲這個非常具體的案例工作。優點和缺點?使用兩個「槽」用於存儲
DateTimeOffset
S,一個用於DateTime
,一個用於int
halfhour偏移(所有時區不是整個小時= /)。然後我們失去了cache[ApplicationStrings.LastUpdate, default : DateTimeOffset.Min]
的功能。
那些代表我的主要思想,即打破DateTimeOffset
並保持IConvertible
或打破IConvertible
並保持DateTimeOffset
。
我還是新來的C#的內在特點,所以任何見解將是有益的。你怎麼看?
編輯: 加法:
- 有現在一個可行的解決方案,它使用日期時間(固定的時區),但是現在需要的時區爲好,最佳的情況是隻使用的DateTimeOffset無處不來代替。其本質上的問題不是重構,而是我的具體問題是。
- 這是一個相當大的應用程序,它使用實體框架等比較模糊的框架,以提供不同的服務和儲存通信,因此保持它的簡單系統定義的類型不會打破LINQ到-X優化等(我不知道自己做這些事有多難)。
- 我反對分裂的數據,因爲我不知道什麼時候另一個人會來發現,有用於時間戳日期時間,並使用它沒有采取偏移(時區)考慮在內。
你究竟想用這個'ISuperConvertible'來做什麼? – 2012-07-30 17:30:23
請注意,對於已編譯的代碼,不存在這樣的概念 - 僅在源代碼級別。 – 2012-07-30 17:39:08
您是否考慮過刪除時區信息並在UTC字典中設置所有日期?然後你可以使用DateTimeOffset.UtcDateTime來獲取實現IConvertible的DateTime。 – JamieSee 2012-07-30 18:24:25