在单行条件语句中传递空值

3

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

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

错误信息是“System.DateTime<null>之间没有显式转换”。

1
重复的问题:https://dev59.com/e3RA5IYBdhLWcg3wsgPq - Philip Rieck
左侧在右侧之后被检查!因此编译器不知道它应该是一个 DateTime?,由于它们不是相同的类型,所以它试图相互转换它们。如果您将其中一个值显式地转换为 DateTime?,它将起作用。 - Jaroslav Jandek
5个回答

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

2

我假设实际上你有一个更有意义的条件语句 - Text 显然是一个字符串属性,将其赋值给 DateTime? 变量没有太多意义。

编译器不知道条件表达式的类型。它并不考虑有一个赋值给 DateTime? 变量的语句 - 它只是试图找到正确的类型。

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

  • null 没有类型,因此不能是 RHS 的类型
  • DateTimenull 没有转换,因此也不能是 LHS 的类型。

修复这个问题最简单的方法是给 RHS 一个真正的类型,所以可以是以下任何一种:

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

当然,你可以将左侧的类型更改为 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 permit, datetime == 没有 ? 允许空值

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

0

null可以是任何引用类型,您需要进行强制转换或使用as运算符:

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

假设textBoxDate可以隐式转换为DateTime?这是值得怀疑的...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接