null許容のDateTimeオブジェクトを使用していて、奇妙な動作に遭遇しました。サンプル関数は次のとおりです。
public DateTime? Weird()
{
DateTime check = DateTime.Now;
DateTime? dt;
if (check == DateTime.MinValue)
dt = null;
else
dt = Viewer.ActiveThroughUTC.ToLocalTime();
//this line give a compile error
dt = (check == DateTime.MinValue) ? (null) : (Viewer.ActiveThroughUTC.ToLocalTime());
return dt;
}
私の知る限り、三項演算子の行は前の4行と同じである必要がありますが、VS2010では、<null>
とDateTimeの間に変換が存在しないというコンパイルエラーが発生します(問題のオブジェクトは'DateTimeですが) ?')。三項演算子について知っておくべきことはありますか、それともこれはバグですか?