Передача нулевых значений в одной строке - PullRequest
3 голосов
/ 15 октября 2010

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

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

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

Ответы [ 5 ]

6 голосов
/ 15 октября 2010

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

DateTime? date = String.IsNullOrEmpty(textBoxDate.Text) ? 
null as DateTime? : DateTime.Parse(textBoxDate.Text);
2 голосов
/ 15 октября 2010

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

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

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

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

Самый простой способ исправить это - дать RHS реальный тип, поэтому любой из:

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

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

0 голосов
/ 20 декабря 2013

это просто, вы просто бросили начальный акт дата-время? == тип допускает не нулевые значения, datetime == без? разрешить нулевые значения

DateTime date = textBoxDate.Text != "" ? textBoxDate.Text : null;
0 голосов
/ 15 октября 2010

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

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

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

0 голосов
/ 15 октября 2010

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

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

Предполагая, что textBoxDate может быть неявно преобразовано в Datetime?, Что сомнительно ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...