Я пытаюсь использовать условный оператор, но меня подвешивает тип, который, по его мнению, должен быть результатом.
Ниже приведен пример, который я ухитрил, чтобы показать проблему, с которой я сталкиваюсь:
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?). Зачем ему вообще нужно конвертировать? Если он равен нулю, используйте это, если это время даты, затем используйте это.
У меня создалось впечатление, что
condition ? first_expression : second_expression;
было таким же, как:
if (condition)
first_expression;
else
second_expression;
Ясно, что это не так. Каковы причины этого?
(ПРИМЕЧАНИЕ. Я знаю, что если я сделаю "myDateTime" нулевым значением DateTime, тогда он будет работать. Но зачем он нужен?
Как я уже говорил, это надуманный пример. В моем реальном примере "myDateTime" - это сопоставимое по значению значение, которое нельзя сделать допустимым.)