본문 바로가기
Programming/C#

(C#) Generic Method 에서 null return 하는 방법

by MeisterTJ 2022. 7. 24.
public static T FindType<T>()
{
    /*
     *  Find T type in specific container
     */
    
    return null;
}

위와 같은 T type에 대한 Generic Method가 있다고 생각해보자. 

T type에 대한 find가 성공할 경우 그 인스턴스를 반환, 실패할 경우 null을 반환하고 싶다.

 

그렇지만 T가 value type인지 reference type인지 알 수 없기 때문에 null return 부분에 에러가 뜨게 된다.

이걸 처리할 수 있는 방법이 3가지가 있다.

 

1. default(T) 

public static T FindType<T>()
{
    /*
     *  Find T type in specific container
     */
    
    return default(T);
}

default(T)를 반환하는 것이다. 

default(T)는 value type일 경우 0, reference type일 경우 null을 반환한다. 

 

2. reference type 명시

public static T FindType<T>() where T : class
{
    /*
     *  Find T type in specific container
     */
    
    return null;
}

T가 class임을 명시하거나 특정 reference 타입을 명시하면 null을 반환할 수 있다.

 

3. Nullable type 명시

public static Nullable<T> FindType<T>() where T : struct
{
    /*
     *  Find T type in specific container
     */
    
    return null;
}

T가 nullable한 value type일 경우 nullable을 리턴한다는 것과 T가 nullable 인 것을 명시하는 것이다.

 

 

Example

public static T GetSystem<T>() where T : FrGameSystem
{
    if (instance == null) return null;

    if (instance.gameSystems.TryGetValue(typeof(T), out var gameSystem))
    {
        if (gameSystem is T value)
        {
            return value;
        }
    }

    return null;
}
void Start()
{
    FrSoundSystem soundSystem = FrGameInstance.GetSystem<FrSoundSystem>();
}

GameSystem 중에서 특정 GameSystem을 Type으로 가져오는 Method

'Programming > C#' 카테고리의 다른 글

(C#) if문에서의 null 체크와 null 연산자의 차이  (0) 2022.08.06