프로그래밍 언어/C#

[C#] 제네릭 메서드(Generic Method) 널(Null) 반환 방법

ShovelingLife 2023. 8. 23. 10:35

매개변수가 null이 아니면, 매개변수의 값을 반환하고 매개변수의 값이 null이면, null을 반환하는 코드다.

T ReturnValue<T>(T val)
{
  if (val != null)
  {
    return val;
  }
  else
  {
    return null;
  }
}

하지만, return null; 코드에서 에러가 발생한다

C#에서 null이 올 수 있는 데이터 타입이 있고 불가능한 데이터 타입이 존재한다. 기본적으로 숫자형 타입들은 Nullable 연산자를 사용하지 않으면, null값을 할당할 수 없다. 즉, 제네릭 타입은 null이 가능한 타입도 있고 불가능한 타입이 있으므로 null을 반환할 수 없다. 만약, 제네릭 메서드에서 null을 반환하고 싶은 경우 default(T)를 사용한다.

T ReturnValue<T>(T val)
{
  if (val != null)
  {
    return val;
  }
  else
  {
    return default(T);
  }
}

Console.WriteLine(ReturnValue<string>(null) == null); // True

위 코드를 실행하면, 매개변수의 값이 null이므로 Console에서 True를 출력한다.

defualt()는 C#에서 타입의 기본 값을 반환하는 메서드다.

bool형은 false, 숫자형은 0, 참조형식은 null을 반환한다.

int num = default(int);

Console.WriteLine(num); // 0

다음과 같이 숫자형 타입인 int형을 Nullable 타입으로 정의하여 null값을 할당한다.

T ReturnValue<T>(T val)
{
  if (val != null)
  {
    return val;
  }
  else
  {
    return default(T);
  }
}

int? num;
num = null;

Console.WriteLine(ReturnValue(num) == null); // True

[C#]제네릭 메서드(Generic Method) 널(Null) 반환 방법 (tistory.com)