[c#] 구문 분석 대 TryParse

Parse ()와 TryParse ()의 차이점은 무엇입니까?

int number = int.Parse(textBoxNumber.Text);

// The Try-Parse Method
int.TryParse(textBoxNumber.Text, out number);

Try-Catch 블록과 같은 어떤 형태의 오류 검사가 있습니까?



답변

Parse값을 구문 분석 할 수없는 경우 예외를 throw하고 성공 여부를 나타내는를 TryParse반환합니다 bool.

TryParse단지 try/ catch내부적으로 가 아닙니다. 요점은 예외없이 구현되어 빠르다는 것입니다. 실제로 이것이 구현 될 가능성이 가장 높은 Parse방법은 메서드가 내부적으로 호출 TryParse한 다음을 반환하면 예외를 throw하는 것 false입니다.

요컨대, Parse값이 유효하다고 확신하는 경우 사용 하십시오. 그렇지 않으면 TryParse.


답변

문자열을 정수로 변환 할 수없는 경우

  • int.Parse() 예외가 발생합니다
  • int.TryParse() false를 반환합니다 (예외를 던지지 않음).

답변

TryParse 메서드를 사용하면 구문 분석 가능한 항목이 있는지 테스트 할 수 있습니다. 잘못된 int를 사용하여 첫 번째 인스턴스 에서처럼 Parse를 시도하면 TryParse에서 예외가 발생하고 구문 분석의 성공 여부를 알려주는 부울을 반환합니다.

각주로서 대부분의 TryParse 메서드에 null을 전달하면 예외가 발생합니다.


답변

TryParse 및 예외 세금

Parse는 문자열에서 지정된 데이터 유형으로의 변환이 실패하는 경우 예외를 throw하는 반면 TryParse는 예외 발생을 명시 적으로 방지합니다.


답변

TryParse는 값을 반환하지 않고 구문 분석이 성공했는지 여부를 나타내는 상태 코드를 반환합니다 (예외를 throw하지 않음).


답변

기록을 위해 두 가지 코드를 테스트하고 있습니다. 단순히 문자열에서 숫자로 변환을 시도하고 실패하면 숫자를 0에 할당합니다.

        if (!Int32.TryParse(txt,out tmpint)) {
            tmpint = 0;
        }

과:

        try {
            tmpint = Convert.ToInt32(txt);
        } catch (Exception) {
            tmpint = 0;
        }

C #의 경우 가장 좋은 옵션은 try & Catch 대안이 예외를 throw했기 때문에 tryparse를 사용하는 것입니다.

A first chance exception of type 'System.FormatException' occurred in mscorlib.dll

고통스럽고 느리고 바람직하지 않지만 Debug의 예외가 중지되지 않는 한 코드는 중지되지 않습니다.


답변

나는 그것의 매우 오래된 게시물을 알고 있지만 Parse 대 TryParse에 대한 몇 가지 세부 사항을 공유하려고 생각했습니다.

DateTime을 String으로 변환해야하는 시나리오가 있었고 datevalue null 또는 string.empty 인 경우 예외가 발생했습니다. 이를 극복하기 위해 Parse를 TryParse로 대체했으며 기본 날짜를 가져옵니다.

이전 코드 :

dTest[i].StartDate = DateTime.Parse(StartDate).ToString("MM/dd/yyyy");
dTest[i].EndDate = DateTime.Parse(EndDate).ToString("MM/dd/yyyy");

새 코드 :

DateTime startDate = default(DateTime);
DateTime endDate=default(DateTime);
DateTime.TryParse(dPolicyPaidHistories[i].StartDate, out startDate);
DateTime.TryParse(dPolicyPaidHistories[i].EndDate, out endDate);

다른 변수를 선언하고 TryParse를 위해 Out으로 사용해야합니다.