2012-11-07 4 views
0

FileHelper을 사용하여 CSV 파일을 구문 분석합니다. 파일 구문 분석 중 오류 메시지가 최종 사용자에게 표시됩니다. 최종 사용자는 기술 오류 메시지를 이해하지 못할 수도 있습니다. 너무 많은 사무원이 Int32이 무엇인지 또는 Class: UploadFooDto인지 알지 못합니다.FileHelper 라이브러리 - 사용자 정의 오류 메시지

오류 메시지를보다 사용자에게 맞게 사용자 지정하고 싶습니다. 같은 뭔가 :

  • 행 1 열 2 문자열은 (A) 숫자 대신
  • 라인 2. 열 3. '13의 입력 된 -14-15 '유효한 날짜
아니다

API에서 오류 메시지를 사용자 정의 할 수있는 항목을 찾을 수 없습니다. 지금까지 내가 가진 대부분의 오류를 정리하는 확장 방법은 다음과 같습니다.

public static class FileHelperExceptionExtensions 
{ 
    public static string BuildMessage(this ErrorInfo error) 
    { 
     if (error.ExceptionInfo is ConvertException) 
     { 
      return ((ConvertException)error.ExceptionInfo).BuildMessage(); 
     } 

     if (error.ExceptionInfo is BadUsageException) 
     { 
      var message = error.ExceptionInfo.Message; 
      var readTo = message.IndexOf("Class:"); 
      return message.Substring(0, readTo); 
     } 

     return string.Format("Line: {0}. An unspecific error occured.", error.LineNumber); 
    } 

    public static string BuildMessage(this ConvertException exception) 
    { 
     return string.Format("Line: {0}. Column: {1}. Field: {2}. Cannot convert '{3}' to type: '{4}'", exception.LineNumber, exception.ColumnNumber, exception.FieldName, exception.FieldStringValue, exception.FieldType.Name); 
    } 
} 

그러나 이러한 확장은 여전히 ​​많이 필요합니다. 오류 메시지를 사용자 정의 할 수 있습니까?

+0

내 유일한 변경 사항은 ConvertException을 "var convertInfo = error.ExceptionInfo as ConvertException;"을 사용하여 로컬 변수로 변환하는 것입니다. 널 (null)인지 검사합니다. 그렇다면 유형 검사가 두 개 많이 수행되지 않습니다. – netniV

답변

0

확장 방법을 개선하는 것이 어렵지 만 그만한 가치가 있습니다.

FileHelpers.ConvertHelpers.Int32Converterinternalsealed이므로 하위 변환기를 하위 클래스로 분류 할 수 없습니다. 각 유형에 대해 자신의 custom converter을 만들 수 있습니다 (FileHelpers의 해당 소스 코드를 기반으로합니다 (예 : Int32Converter). 그런 다음 메시지의 형식을 다르게 지정하는 ConvertException (또는 sealed)을 대체 할 수 있습니다.

+0

오, 내가 어떻게 봉인과 내부 참을 수 없어 :) 저자는 공개 요청을 받아 들일 지 궁금해? 그리고 그것이 합병되어 누젠에 배치되는데 얼마나 걸릴까요? 지금은 다음 단계는 regex를 사용하고 오류 메시지를 구문 분석하는 것이라고 생각합니다. 깨지기 쉽다. 하지만 이것은 매우 구체적인 작업을위한 것입니다. 따라서 컨텍스트 특정 문자열 조작을 만드는 것은 의문의 여지가 없습니다. –

+0

필자는 @MarcosMeli가 필자에게 예상되는 성능상의 혜택으로 봉인했다고 생각합니다. 끌어 오기 요청과 관련하여 FileHelpers 라이브러리는 자주 변경되지 않지만 끌어 오기 요청이 가끔 허용됩니다. [change log here] (http://teamcity.codebetter.com/viewType.html?buildTypeId=bt66&tab=buildTypeChangeLog)를 참조하십시오. – shamp00

+0

그래, 나는 그것을 보았다. 나는 그가 주제에 무게를다는 것을 희망하고 있었다. 나는 그가 어느 정도 활동적이라고 생각한다. 어쨌든 나는 이것이 나의 선택을 가장 잘 설명하기 때문에 대답으로 표시했다. –

관련 문제