2010-10-15 2 views
3

Просто вымышленный код, но почему это не сработает? (Как переменная date обнуляемым)Передача нулевых значений в одной строке Условный

DateTime? date = textBoxDate.Text != "" ? textBoxDate.Text : null; 

ошибка не «Существует никакого явного преобразования между System.DateTime и <null>

+1

контратип http://stackoverflow.com/questions/858080/nullable-types-and-the-ternary-operator-why-wont-this-work –

+0

Левая сторона проверяется ** после ** правая сторона проверена! Таким образом, компилятор не знает, что он должен быть «DateTime?», И поскольку они не являются одним и тем же типом, он пытается их взаимно преобразовать. Если вы конвертируете одно из значений в 'DateTime? ', Оно будет работать. –

ответ

4

Попробуйте это:

DateTime? date = String.IsNullOrEmpty(textBoxDate.Text) ? 
null as DateTime? : DateTime.Parse(textBoxDate.Text); 
+0

отлично работает для меня, спасибо за публикацию! – Saturnix

0

null может быть любой ссылочный тип, вы должны бросить его или использовать оператор as:

DateTime? date = textBoxDate.Text != "" ? textBoxDate.Text : null as DateTime?; 

Предполагая, что textBoxDate можно преобразовать неявным в DATETIME ?, которая doubtfull ...

2

(я предполагаю, что на самом деле у вас есть условный оператор, который делает гораздо более смысл -. Text предположительно является строковое свойство, и это не имеет особого смысла уступать, что к DateTime? переменной)

Компилятор не знает тип условного выражения. Не учитывается тот факт, что есть назначение переменной DateTime? - она ​​просто пытается найти нужный тип.

Теперь типа выражения должен быть либо типа LHS, или типа ОРЗ ... но:

  • null не имеет типа, так это не может быть тип RHS
  • Нет конверсии от DateTime до null, поэтому он не может быть типом LHS.

Самый простой способ исправить это, чтобы дать РИТ реальный тип, так что любой из:

default(DateTime?) 
(DateTime?) null 
new DateTime?() 

Конечно, можно сделать LHS типа DateTime? вместо этого.

0

Ну, я не знаю, что ваш textBoxDate.Text класс, как, но я был в состоянии получить эту работу, компилировать и возвращает ожидаемый результат ,

TextBox textBoxDate = new TextBox(); 
    textBoxDate.Text = string.Empty; 
    DateTime? date = (textBoxDate.Text != "") ? (DateTime?)DateTime.Parse(textBoxDate.Text) : null; 

Я думаю, что явное приведение к (DateTime?) является то, что вам нужно

0

его легко вы просто бросить начальный бросок DateTime? == type not null values ​​allow, datetime == с отсутствием? позволяют нулевые значения

DateTime date = textBoxDate.Text != "" ? textBoxDate.Text : null; 
Смежные вопросы