모든 유형, 기본 또는 기타를 허용해야하는 일반 클래스가 있습니다. 이것의 유일한 문제는 default(T). 값 유형 또는 문자열에서 default를 호출하면 적절한 값 (예 : 빈 문자열)으로 초기화됩니다. default(T)객체 를 호출하면 null을 반환합니다. 여러 가지 이유로 기본 유형이 아닌 경우 null이 아닌 유형의 기본 인스턴스가 있는지 확인해야합니다 . 다음은 시도 1입니다.
T createDefault()
{
if(typeof(T).IsValueType)
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
문제-문자열이 값 유형이 아니지만 매개 변수가없는 생성자가 없습니다. 따라서 현재 솔루션은 다음과 같습니다.
T createDefault()
{
if(typeof(T).IsValueType || typeof(T).FullName == "System.String")
{
return default(T);
}
else
{
return Activator.CreateInstance<T>();
}
}
그러나 이것은 kludge처럼 느껴집니다. 문자열 케이스를 처리하는 더 좋은 방법이 있습니까?