2010-12-10 2 views
3

내가 가지고있는 경우 (.NET에서/C#) 예를 들어 유형 long의 변수 나는 같은 형식의 문자열로 변환 할 수 있습니다 : 그 유형 I에 대한 유효하지 않은 형식을 지정하는 경우형식 지정자가 주어진 데이터 형식에 유효한지 확인할 수 있습니까?

long value = 12345; 
string formattedValue = value.ToString("D10"); // returns "0000" 

나는 형식 것을 long.IsFormatValid("Q10") 같은 것을 적용하기 전에 (포맷을 시도하고 예외를 잡기 제외) 서식 지시자가 유효한지 확인하는 방법이 있나요 :

long value = 12345; 
string formattedValue = value.ToString("Q10"); // throws a System.FormatException 

질문 : 예외가?

도움 주셔서 감사합니다.

답변

2

나는이 시도하지했지만 나는 그런 당신이 확장 메서드를 만들 수 있다고 생각합니다 : 당신이 다음 따라서 적용 할 수있는

namespace ExtensionMethods 
{ 
    public static class MyExtensions 
    { 

     public static bool IsFormatValid<T>(this T target, string Format) 
      where T : IFormattable 
     { 
      try 
      { 
       target.ToString(Format, null); 
      } 
      catch 
      { 
       return false; 
      } 
      return true; 
     } 
    } 
} 

:

long value = 12345; 
if (value.IsFormatValid("Q0")) 
{ 
    ... 
+0

오우,이게 좋아 보인다! (여전히 기본적으로 하나의 단일 지점에 캡슐화 된 예외를 검사하지만) – Slauma

+0

나를 위해 작동합니다 (False로 인쇄 됨). –

+0

@ 존 Skeet : 알았어 ... 내 마음을 잃고. 나는 잠을 자고 싶다. – Lazarus

2

을 대신 수표를 만드는 것보다 개발자가 documentation을 읽고 어디에 허용되는지 알아 보는 것이 더 나을 것이라고 제안합니다.

그러나 많은 오타가있는 문제가있는 경우 해당 페이지의 정보에서 조회 테이블을 작성할 수 있다고 가정합니다. 단지 사람들이 올바른 형식 지정자 (실수로 f을 쓰지만 그 의미는 e 등) 사이에서 실수를하게한다는 점에서 보안에 대한 잘못된 인식을 줄 수 있습니다.

TryParse/Parse에 대한 혼동을 제거하기 위해 편집 됨.

+1

미친 아이디어로, 사용자 입력에 의해 포맷 문자열이 제공된다고 가정하십시오. TryParse와 Parse가 여기서 어떻게 관련이 있는지도 모릅니다.이 값은 string이 아닌 value 값입니다. – Lazarus

+0

'Parse' 나'TryParse'가 어떻게 도움이 될지 모르겠습니다. 'string'을'long' (또는 다른 타입)으로 변환 할 필요는 없지만'long' (또는 다른 타입)에서 주어진 포맷 지정자를 사용하여'string'으로 변환 할 필요는 없습니다. 문제는이 형식 지정자가 사용자 (아마도 프로그래머 그 자체)에 의해 (자주 변경 될 수있는) 일부 텍스트 파일의 간단한 문자열로 입력된다는 것이고이 형식이 유효한지 유효한지 확인해야하는 경우가 종종 있습니다. – Slauma

+0

@Lazarus : TryParse 대 Parse가 혼란스러워졌습니다. 지적 해 주셔서 고맙습니다. –

관련 문제