私は価値をキャストしたくないnull
(私には奇妙に見える):
long? variable1 = reader.IsDBNull(2) ? null : (long?)reader.GetInt64(2);
別のオプション:
long? variable1 = reader.IsDBNull(2) ? default : reader.GetInt64(2); // requires C# 7.1
long? variable1 = reader.IsDBNull(2) ? default(long?) : reader.GetInt64(2);
long? variable1 = reader.IsDBNull(2) ? (long?)null : reader.GetInt64(2);
long? variable1 = reader.IsDBNull(2) ? new Nullable<long>() : reader.GetInt64(2);
long? variable1 = reader.IsDBNull(2) ? new long?() : reader.GetInt64(2);
long? variable1 = reader.IsDBNull(2) ? null : new long?(reader.GetInt64(2));
それは好みの問題です。最初のオプションは他のオプションよりも読みやすいと思います。
更新:コードをより明確にするために、いくつかの拡張メソッドを作成することも検討してください。
public static class DataReaderExtensions
{
public static long? GetNullableInt64(this IDataReader reader, int index)
{
if (reader.IsDBNull(index))
return null;
return reader.GetInt64(index);
}
}
この場合、三項演算子(null許容型へのキャストなし)を使用せず、リーダーからの値の読み取りはよりきれいに見えます。
long? variable1 = reader.GetNullableInt64(2);