出力がDBNull
であるかどうかをチェックし、ジェネリック型がnullの場合はnullを返す関数を記述しています。そうでなければ、単にエラーをスローします。ジェネリック型がnullableの場合はnullを返します
アップデート:私はdefault(T)
リターンがすべてのNULL可能フィールドに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を返すように他の方法がある場合は?
'reader.GetFieldType(key)'が通常 'DBNull'を返すかどうかはわかりません - それでも動作しますか?もしもnullでないなら、カラムが保持するものを表す何かを返すことを期待しています* –
提案(Marcの答え/コメントに加えて)のように、 'if'ステートメントを逆転させます* null、 'return ...;')、そして 'else ...'を' throw ...; 'のために除外します。 –