2010-12-09 2 views
1
나는이 같은 폐쇄 형 소스 타사 라이브러리를 사용하고 있습니다

: 이제검색 FormatException을 인수

object val = SomeClass.ExtractValue(someObject); 

어딘가에 도로 아래로, 타사 라이브러리는 예상치 못한이있는 날짜 시간 값을 구문 분석을 시도 format를 슬로우 해, FormatException를 Throw합니다.

이 경우 구문 분석에 실패한 문자열을 검색하여 직접 구문 분석하려고합니다. 이 같은 뭔가 :

object val; 
try 
{ 
    val = SomeClass.ExtractValue(someObject); 
} 
catch(FormatException e) 
{ 
    string failed = e.GetParseArgument(); 
    val = DateTime.Parse(failed + " 2010"); 
} 

예, 단순히 올해 추가하는 것은 매우 의미가있다,하지만 당신은 아이디어를 얻을. 타사 라이브러리가 필요한 모든 형식을 지원하지 않지만 "someObject"에서 데이터를 쉽게 가져올 수 없습니다. (예, 리플렉터를 사용하여 라이브러리를 복제하려고 시도 할 수 있지만이를 피하고 싶습니다.)

어떤 방법이 있습니까? 감사합니다. .

+0

타사 라이브러리에 대한 입력을 제어 할 수 있습니까? IE에서 SomeObject의 dateTime을 구문 분석하고 제 3자가이를 전달하기 전에 받아 들일 수있는 형식으로 다시 저장할 수 있습니까? –

+0

아니요. 사실 someObject는 IDataReader 객체입니다. – Andreas

답변

0

someObject은 IDataReader이므로 장식자를 만들어 ExtractValue에 전달할 수 있습니다. 그런 다음 날짜 문자열을 가로 채고 형식이 라이브러리에 전달되기 전에 형식을 수정할 수 있습니다.

또는 독자가 읽은 값을 모두 기록한 다음 실패한 데이터를 마지막으로 읽은 항목으로 가져 와서 직접 구문 분석을 시도 할 수 있습니다.

+0

고마워, 내가 바라던만큼 그다지 간단한 해결책은 아니지만 나는 그 기회를 줄 것이다. – Andreas

+0

@Andreas - IDataReader는 상당히 큰 인터페이스이므로 linfu와 같은 동적 프록시를 사용하고 사용자 정의 데코레이터 클래스를 만드는 대신 필요한 메소드를 가로 채기가 더 쉽습니다. – Lee