2012-07-30 3 views
3

IConvertible과 관련된 문제가 있습니다. 즉, DateTimeOffsetIConvertible으로 구현 된 경우 문제가 없습니다.수정 불가능한 유형의 IConvertible 기능 구현

도로를 닫을 수 있도록 인터페이스를 구현하는 데 확장 메서드를 사용할 수 없습니다. DateTimeOffset 구조체는 부분적이지 않으므로 확장 할 수 없습니다.

일부 MSDN 설명서를 읽으므로 TypeCode 열거 형을 발견했습니다. IConvertible이 제대로 작동하는 데 필요한 것으로 보입니다. 어떻게 구현할 것 DateTimeOffset- : 그리고 내 실망 열거는 DateTimeTimeSpan (즉 DateTimeOffset = P)

다음과 같이 내 질문은 함께 Tuple -like 구조를 사용하는 옵션을 종료하거나 시간 범위를 포함하지 않았다 기본적인 IConvertible 또는 유사한 지원을 가지고있는 동급입니까?

구현은 [index,TType] where TType : IConvertible (setter, getters 및 try-getters) 기능을 갖춘 멋진 지연 사전 구현에 관한 것이며, 표준 시간대 관련 데이터를 저장할 수 있어야합니다.

내 아이디어 지금까지 :

  • 현실에 IConvertible 단지 확장하는 새로운 ISuperConvertible 인터페이스를 만들고 DateTimeOffset 특별한 경우를합니다. 이것은 일반적으로 우리의 IConvertible 지원을 깨뜨릴 것이지만이 매우 구체적인 경우에 작동합니다. 장점과 단점? DateTimeOffset의 오프셋 int halfhour 대한 DateTime 하나 하나를 기억

  • 사용 개의 "슬롯"(전체 시간대에는 온 시간 =/없음). 그런 다음 cache[ApplicationStrings.LastUpdate, default : DateTimeOffset.Min] 기능을 잃게됩니다.

즉 내 주요 생각, DateTimeOffset을 깨고 IConvertible을 유지하거나 IConvertible을 깨고 DateTimeOffset 유지를 나타냅니다.

저는 C#의 고유 한 특징에 대해 아직 익숙하지 않으므로 모든 통찰력이 도움이 될 것입니다. 당신의 생각은 무엇입니까?

편집 : 추가 :

  • 날짜 시간 (고정 시간대)를 사용하지만, 지금은 시간대뿐만 아니라 필요 지금 작업 솔루션이 최적의 시나리오는 대신 사방을 DateTimeOffset을 사용하는 것,있다. 그 본질에있는 질문은 리팩토링에 관한 것이 아니라 내 구체적인 문제입니다.
  • 매우 큰 응용 프로그램입니다. 엔티티 프레임 워크와 다른 서비스 및 저장소와 통신하기 위해 더 모호한 프레임 워크를 사용하므로 간단한 시스템 정의 형식을 유지하면 LINQ-X 최적화 등이 중단되지 않습니다. 이 일들이 얼마나 힘든 일인지).
  • 다른 사람이 와서 타임 스탬프에 사용되는 DateTime이 있음을 알게되어 오프셋 (시간대)을 고려하지 않고 사용할 수 있기 때문에 데이터 분할에 반대합니다.
+2

실제로이 'ISuperConvertible'로 무엇을하려합니까? –

+1

이미 컴파일 된 코드에는 partial과 같은 개념이 없습니다. 소스 코드 수준에만 있습니다. –

+1

시간대 정보를 삭제하고 사전의 모든 날짜를 UTC로 만드는 것을 고려 했습니까? 그런 다음 DateTimeOffset.UtcDateTime을 사용하여 IConvertible을 구현하는 DateTime을 얻을 수 있습니다. – JamieSee

답변

0

IConvertible을 구현하는 DateTimeOffset에 자체 래퍼 클래스를 만들 수 있습니다. 이 클래스는 래퍼 속성 및 메서드에 사용할 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 
} 
+0

그것은 좋은 생각이지만, 엔티티 프레임 워크 및 일부 데이터베이스 공급자와 함께 몇 가지 문제로 실행 표준 .NET 유형을 사용하지 않을 때, 그래서 슬프게도 옵션이 아니에요. – flindeberg

+0

어디에서 IConvertible을 구현해야합니까? –