출력이 DBNull
인지 확인하고 제네릭 형식이 Null 인 경우 null을 반환합니다. 그렇지 않으면 단순히 오류가 발생합니다. 제네릭 형식이 nullable 인 경우 null을 반환합니다.
업데이트
: 모든 권고를public T Get<T>(string key)
{
int ordinal = reader.GetOrdinal(key);
if (reader.IsDBNull(ordinal))
{
if (typeof(T).GetTypeInfo().IsValueType && Nullable.GetUnderlyingType(typeof(T)) == null) // isn't a nullable field
throw new InvalidCastException();
else return default(T);
}
return reader.GetFieldValue<T>(ordinal);
}
나는 모든 널 (NULL) 필드에 null이 아닌 확인 default(T)
경우 반환 오전 그러나
'reader.GetFieldType (key)'가 보통'DBNull'을 반환하는지 확실하지 않습니다 - 작동합니까? 그 열이 null이 아닌 경우 보유 할 수있는 것을 나타내는 무언가를 반환 할 것으로 * * 기대합니다. * –
제안 (Marc의 응답/설명에 추가)과 마찬가지로'if' 문을 반전합니다. * null,'return ...;'), 그리고 그냥'throw ...;에 대한'else's를 버리십시오. –