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 |
---|