条件演算子を使用しようとしていますが、結果が正しいと思われる型に行き詰まっています。
以下は、私が抱えている問題を示すために考案した例です。
class Program
{
public static void OutputDateTime(DateTime? datetime)
{
Console.WriteLine(datetime);
}
public static bool IsDateTimeHappy(DateTime datetime)
{
if (DateTime.Compare(datetime, DateTime.Parse("1/1")) == 0)
return true;
return false;
}
static void Main(string[] args)
{
DateTime myDateTime = DateTime.Now;
OutputDateTime(IsDateTimeHappy(myDateTime) ? null : myDateTime);
Console.ReadLine(); ^
} |
} |
// This line has the compile issue ---------------+
上記の行で、次のコンパイル エラーが発生します。
'< null >' と 'System.DateTime' の間に暗黙的な変換がないため、条件式の型を特定できません
パラメーターが null 許容型 (DateTime?) であるため、混乱しています。なぜ変換する必要があるのですか?null の場合はそれを使用し、日時の場合はそれを使用します。
私は次のような印象を受けました。
condition ? first_expression : second_expression;
は次と同じでした:
if (condition)
first_expression;
else
second_expression;
明らかにそうではありません。この背後にある理由は何ですか?
(注:「myDateTime」をnull許容のDateTimeにするとうまくいくことはわかっています。しかし、なぜそれが必要なのですか?
先に述べたように、これは不自然な例です。私の実際の例では、「myDateTime」は、null 可能にできないデータ マップ値です。)