Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 문자열을 Nullable int로 안전하게 변환하는 방법


C#은 일반적인 값 범위뿐만 아니라 null 값도 할당할 수 있는 특수한 데이터 타입인 nullable 타입(널 가능 형식)을 제공합니다.

nullable 타입은 C# 2.0에서 도입되었으며, 값 형식(value type) 변수에 null을 할당할 수 있도록 지원합니다. 선언 방법은 Nullable<T> 형태이며, 여기서 T는 기본 타입을 의미합니다. 축약 표현으로는 타입 뒤에 물음표(?)를 붙여 int?처럼 사용할 수 있습니다.

Nullable 타입의 주요 특징

  • nullable 타입은 값 형식(int, double, bool 등)에만 사용할 수 있습니다.

  • Value 속성은 값이 null일 경우 InvalidOperationException을 발생시키며, 값이 존재하면 해당 값을 반환합니다.

  • HasValue 속성은 변수에 값이 포함되어 있으면 true를, null이면 false를 반환합니다.

  • nullable 타입에는 == 및 != 연산자만 직접 사용할 수 있으며, 그 외 비교 연산에는 Nullable 정적 클래스를 활용해야 합니다.

  • 중첩된 nullable 타입은 허용되지 않습니다. 예를 들어 Nullable<Nullable<int>>로 선언하면 컴파일 오류가 발생합니다.

문자열을 nullable int로 변환하기

문자열을 nullable int로 변환하는 가장 안전한 방법은 int.TryParse를 활용하는 것입니다. 변환에 실패하면 예외를 던지는 대신 false를 반환하므로, 실패 시 null을 반환하는 확장 메서드로 깔끔하게 구현할 수 있습니다.

예제 1: 숫자 문자열 변환

static class Program{
    static void Main(string[] args){
        string s = "123";
        System.Console.WriteLine(s.ToNullableInt());
        Console.ReadLine();
    }
    static int? ToNullableInt(this string s){
        int i;
        if (int.TryParse(s, out i)) return i;
        return null;
    }
}

출력

123

예제 2: null 문자열 처리

null이 확장 메서드에 전달되면 변환에 실패하여 아무 값도 출력되지 않습니다. 이처럼 int.TryParse는 잘못된 입력이나 null에 대해 예외를 발생시키지 않고 안전하게 처리한다는 장점이 있습니다.

static class Program{
    static void Main(string[] args){
        string s = null;
        System.Console.WriteLine(s.ToNullableInt());
        Console.ReadLine();
    }
    static int? ToNullableInt(this string s){
        int i;
        if (int.TryParse(s, out i)) return i;
        return null;
    }
}

정리

문자열을 nullable int로 구문 분석할 때는 int.TryParse와 확장 메서드를 조합하는 것이 가장 권장되는 패턴입니다. 이 방식은 유효하지 않은 입력에서도 예외 없이 null을 반환하므로, 숫자 변환이 실패할 수 있는 상황에서 코드의 안정성과 가독성을 모두 높여줍니다.