在单行中传递空值条件

时间:2010-10-15 13:44:05

标签: c# .net asp.net visual-studio-2008

只是一个虚构的代码,但为什么这不起作用? (因为date变量可以为空)

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

错误是“System.DateTime<null>

之间没有明确转换

5 个答案:

答案 0 :(得分:6)

试试这个:

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

答案 1 :(得分:2)

(我假设实际上你有一个更有意义的条件 - Text可能是一个字符串属性,将它赋给{{1}没有多大意义变量。)

编译器不知道条件表达式的类型。它没有考虑到DateTime?变量的赋值事实 - 它只是试图找到正确的类型。

现在表达式的类型必须 LHS的类型, RHS的类型......但是:

  • DateTime?没有类型,因此它不能是RHS的类型
  • nullDateTime没有转换,因此它也不能是LHS的类型。

解决这个问题的最简单方法是给RHS一个真实的类型,所以:

null

您当然可以改为default(DateTime?) (DateTime?) null new DateTime?() 类型的LHS。

答案 2 :(得分:0)

null可以是任何引用类型,您必须将其强制转换或使用as运算符:

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

假设textBoxDate可以被隐含地转换为Datetime ?,这是值得怀疑的......

答案 3 :(得分:0)

好吧,我不知道你的 textBoxDate.Text 类是什么样的,但我能够让它工作,编译并返回预期的结果。

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

我认为(DateTime?)的明确演员是您需要的

答案 4 :(得分:0)

你很容易退出初始演员表 约会时间 ? ==键入not null值permit, datetime ==没有了?允许空值

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