我正在尝试使用条件运算符,但我对它认为结果应该是的类型感到困惑。
以下是我试图展示我遇到的问题的示例:
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”之间没有隐式转换
我很困惑,因为参数是可以为空的类型(DateTime?)。为什么它需要转换?如果它为空,则使用它,如果它是日期时间,则使用它。
我的印象是:
condition ? first_expression : second_expression;
与以下内容相同:
if (condition)
first_expression;
else
second_expression;
显然情况并非如此。这背后的原因是什么?
(注意:我知道如果我将“myDateTime”设为可为空的 DateTime,那么它将起作用。但为什么需要它呢?
正如我之前所说,这是一个人为的例子。在我的真实示例中,“myDateTime”是一个不能为空的数据映射值。)