C# 以单行条件传递空值
只是一个虚构的代码,但为什么这行不通呢?(由于C# 以单行条件传递空值,c#,.net,asp.net,visual-studio-2008,C#,.net,Asp.net,Visual Studio 2008,只是一个虚构的代码,但为什么这行不通呢?(由于date变量可为空) 错误是“在系统之间没有显式转换。DateTime和null可以是任何引用类型,您必须将其强制转换或使用作为运算符: DateTime? date = textBoxDate.Text != "" ? textBoxDate.Text : null as DateTime?; 假设textBoxDate可以隐式转换为Datetime?,这无疑是完整的…(我假设在现实中,您有一个更有意义的条件-Text可能是一个字符串属性,将其指
date
变量可为空)
错误是“在
系统之间没有显式转换。DateTime
和null
可以是任何引用类型,您必须将其强制转换或使用作为
运算符:
DateTime? date = textBoxDate.Text != "" ? textBoxDate.Text : null as DateTime?;
假设textBoxDate可以隐式转换为Datetime?,这无疑是完整的…(我假设在现实中,您有一个更有意义的条件-Text
可能是一个字符串属性,将其指定给Datetime?
变量没有多大意义。)
编译器不知道条件表达式的类型。它没有考虑到有一个赋值给DateTime?
变量的事实-它只是试图找到正确的类型
现在表达式的类型必须是LHS的类型或RHS的类型…但是:
null
没有类型,因此它不能是RHS的类型
- 没有从
DateTime
到null
的转换,因此它也不能是LHS的类型
解决此问题的最简单方法是为RHS提供一个实类型,以便:
default(DateTime?)
(DateTime?) null
new DateTime?()
当然,您可以将LHS改为DateTime?
。试试这个:
DateTime? date = String.IsNullOrEmpty(textBoxDate.Text) ?
null as DateTime? : DateTime.Parse(textBoxDate.Text);
嗯,我不知道您的textBoxDate.Text类是什么样的,但我能够让它工作、编译并返回预期结果
TextBox textBoxDate = new TextBox();
textBoxDate.Text = string.Empty;
DateTime? date = (textBoxDate.Text != "") ? (DateTime?)DateTime.Parse(textBoxDate.Text) : null;
我认为显式转换到(DateTime?
是您所需要的您只需退出初始转换即可
datetime?==类型不允许为空值,
datetime==不带允许的空值
DateTime date = textBoxDate.Text != "" ? textBoxDate.Text : null;
左侧的重复在右侧被检查后被检查!因此编译器不知道它应该是DateTime?
,并且由于它们不是相同的类型,它正在尝试相互转换。如果您明确地将其中一个值转换为DateTime?
,它将工作。
DateTime date = textBoxDate.Text != "" ? textBoxDate.Text : null;