【发布时间】:2023-03-26 02:53:02
【问题描述】:
我正在尝试使用条件运算符,但我对它认为结果应该是的类型感到困惑。
以下是我试图展示我遇到的问题的示例:
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 ---------------+
在上面指出的那一行,我得到以下编译错误:
无法确定条件表达式的类型,因为 '' 和 'System.DateTime' 之间没有隐式转换
我很困惑,因为参数是可以为空的类型(DateTime?)。为什么它需要转换?如果为空,则使用它,如果是日期时间,则使用它。
我的印象是:
condition ? first_expression : second_expression;
与以下内容相同:
if (condition)
first_expression;
else
second_expression;
显然情况并非如此。这背后的原因是什么?
(注意:我知道如果我将“myDateTime”设为可为空的 DateTime,那么它将起作用。但为什么需要它?
正如我之前所说,这是一个人为的例子。在我的真实示例中,“myDateTime”是一个不能为空的数据映射值。)
【问题讨论】:
标签: c# type-conversion nullable ternary-operator conditional-operator