Program Tip

더 나은 점 : int.TryParse 또는 try {int.Parse ()} catch

programtip 2020. 12. 6. 21:59
반응형

더 나은 점 : int.TryParse 또는 try {int.Parse ()} catch


알아 .. 알아 ... 성능은 여기서 주요 관심사가 아니라 호기심 때문에 무엇이 더 좋을까요?

bool parsed = int.TryParse(string, out num);
if (parsed)
...

또는

try {
    int.Parse(string);
}
catch () {
    do something...
}

Better 는 매우 주관적입니다. 예를 들어, 저는 개인적으로를 선호합니다 int.TryParse. 왜냐하면 대부분의 경우 파싱이 실패하더라도 실패 하는지 신경 쓰지 않기 때문입니다. 그러나 int.Parse( 문서 에 따르면 ) 세 가지 다른 예외를 던질 수 있습니다 .

  • 입력이 null입니다.
  • 입력이 유효한 형식이 아닙니다.
  • 입력에 오버플로를 생성하는 숫자가 포함되어 있습니다.

실패 이유에 관심이 있다면 int.Parse분명히 더 나은 선택입니다.

언제나 그렇듯이 컨텍스트가 왕입니다.


변환이 때때로 실패하는 것이 예외적 인가 아니면 변환이 때때로 실패 할 것으로 예상되고 정상 입니까? 전자 인 경우 예외를 사용하십시오 . 후자의 경우 예외를 피하십시오 . 예외는 이유 때문에 "예외"라고합니다. 예외적 인 상황 을 처리하기 위해서만 사용해야합니다 .


변환이 때때로 실패 할 것으로 예상되는 경우 다음 int.TryParse과 같이 조건부 (Ternary) 연산자 를 사용 하여 한 줄에 깔끔하게 사용 하는 것을 좋아합니다.

int myInt = int.TryParse(myString, out myInt) ? myInt : 0;

이 경우 TryParse 메서드가 실패하면 0이 기본값으로 사용됩니다.

null변환이 실패하면 기본값을 덮어 쓰는 nullable 형식에도 정말 유용 합니다.


첫번째. 두 번째는 예외에 의한 코딩으로 간주 됩니다 .


개인적으로 다음을 선호합니다.

if (int.TryParse(string, out num))
{
   ...
} 

첫번째! 예외로 코딩해서는 안됩니다.

당신은 그것을 줄일 수 있습니다

if (int.TryParse(string, out num))


첫째, 단연코. George가 말했듯이 두 번째는 예외에 의한 코딩이며 성능에 큰 영향을 미칩니다. 그리고 성능은 항상 문제가되어야합니다.


예외를 잡는 것은 오버 헤드가 더 많으므로 TryParse를 사용하겠습니다.

또한 TryParse 메서드는 변환이 실패해도 예외를 throw하지 않습니다. s가 유효하지 않고 성공적으로 구문 분석 할 수없는 경우 FormatException을 테스트하기 위해 예외 처리를 사용할 필요가 없습니다.

여기 에서 복사 붙여 넣은 마지막 부분


염두에 두어야 할 또 다른 점은 Visual Studio 디버그 / 출력 창에 예외가 (선택적으로) 기록된다는 것입니다. 예외의 성능 오버 헤드가 사소한 경우에도 디버깅 할 때 각 예외에 대한 텍스트 줄을 작성하면 속도가 느려질 수 있습니다. 더 주목할만한 예외는 실패한 정수 구문 분석 작업의 모든 소음 사이에서도 익사 할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/4945763/what-is-better-int-tryparse-or-try-int-parse-catch

반응형