프로그래밍/공부

C# - Parse, TryParse, Convert의 차이점

 

Parse

  • 문자열 표현을 해당하는 형식으로 변환한다
  • 특정 형으로 변환할 수 없는 경우 FormatException 발생
  • null 변환시 ArgumentNullException 발생
string numStr = "0.555";
string nullStr = null;

Int32.Parse(numStr);	// FormatException
Int32.Parse(nullStr);   // ArgumentNullException

 

 

 

TryParse

  • 문자열 표현을 해당하는 형식으로 변환한다, 성공여부를 반환한다
string numStr = "0.555";
string nullStr = null;
int num = 0;

Int32.TryParse(numStr, out num);    // false (0)
Int32.TryParse(nullStr, out num);   // false (0)

 

 

 

Convert

  • 기본 데이터 형식을 다른 데이터 형식으로 변환한다
  • 모든 기본 형식을 다른 모든 기본 형식으로 변환하는 변환 메서드가 있다
  • 실제 호출은 런타임에 기본 형식의 값대상 기본 형식에 따라 5가지 결과 중 하나를 생성한다
  • null을 변환시 Exception을 호출하지 않고 기본값을 반환한다

5가지 결과

  1. 변환이 일어나지 않는다
    • 같은 형식으로 변환을 시도할 경우 원래 형식의 인스턴스를 반환함
      • Ex) Convert.ToInt32(Int32)
  2. InvalidCastException 발생
    • 특정 변환이 지원되지 않는 경우
      • Char                                                  => Bool, Single, Double, Decimal, DateTime
      • Bool, Single, Double, Decimal, DateTime => Char
      • DateTime                                          => String을 제외한 모든 type
      • String을 제외한 모든 type                => DateTime
  3. FormatException 발생
    • 문자열 => 다른 기본 유형으로 변환 시도 실패시
      • "True", "true", "False", "false"가 아닌 string => bool 변환 시도시
      • 여러 문자로 구성된 string                              => Char 변환 시도시
      • 숫자로 구성되지 않은 string                          => any numeric type으로 변환 시도시
      • date, time value로 구성되지 않은 string   => DateTime으로 변환 시도시
  4. OverflowException 발생
    • 축소 변환으로 인해 데이터가 손실될 때 발생
      • Int32 type 10000 => Byte로 변환 시도시, 10000이 Byte 범위를 벗어나기 때문에 발생함
  5. 성공적인 변환