値をオブジェクトとして取得し、それがDBNullであるかどうかを確認する方が、場合によっては高速になることを思い出しているようです。
private Int32? GetNullableInt32(SqlDataReader dataReader, int fieldIndex)
{
object value = dataReader.GetValue(fieldIndex);
return value is DBNull ? (Int32?) null : (Int32) value;
}
少なくとも試してみる価値はあります。これは、箱から出してすぐに開梱できることを前提としていることに注意してくださいint...それが正しいかどうかはわかりませんが、簡単に確認できます。
ここで、安全性がやや劣る別のアプローチがあります。たとえば、フィールドが実際に文字列であっても、整数以外の値に対してnullを返します。
private Int32? GetNullableInt32(SqlDataReader dataReader, int fieldIndex)
{
return dataReader.GetValue(fieldIndex) as Int32?;
}
以前、null許容型が期待したほど高速ではない「as」について書きましたが、これは少し異なる場合があります...繰り返しになりますが、試してみる価値があります。
ただし、これが本当にボトルネックである場合は、本当に驚きます...そもそもデータベースからデータを取得するのは、はるかにコストがかかるでしょう。このためのベンチマークはありますか?