我想使用c#中的三元运算符检查传递的值是否为null或datetime值?
我尝试过这样
fromDate == null ? null : Convert.ToDateTime(fromDate)
获取错误:
type of conditional expression cannot be determined
我想检查变量fromDate
是否为null或是否具有日期时间值?
变量fromDate来自查询字符串和字符串类型。
来自?: Operator
:
first_expression和second_expression的类型必须相同,或者必须存在从一种类型到另一种类型的隐式转换。
?: Operator
condition ? first_expression : second_expression;
返回Convert.ToDateTime
,并且在Convert.ToDateTime
和DateTime
之间没有隐式转换。 条件运算符是一个表达式,需要返回类型。
对我来说,使用null
(返回DateTime
)作为第一个表达式并使用另一个布尔值(DateTime.TryParse
或boolean
)作为第二表达式对我来说似乎是一个逻辑选择。 true
似乎合乎逻辑。
或者,您可以使用可空的DateTime,例如false
Damiths' answer
如果您具有DateTime?
的字符串值,请执行以下操作
DateTime? foo;
if(foo.HasValue)
{
//Nullable DateTime has a value..
}
如果您知道日期时间格式,最好让您的输入使用fromDate
方法
如果fromDate是DateTime,那么可以简单地检查如下
DateTime dt;
bool isValidDate = String.IsNullOrEmpty(fromDate) ? false : DateTime.TryParse(fromDate, out dt);
您不需要DateTime.TryParseExact
似乎主要问题是您试图将fromDate.HasValue
分配给?: Operator
DateTime是一个结构而不是引用类型,因此无法完成。
或者使用可为空的DateTime(null
)或使用特定值来表示空值,例如DateTime
这里看一个例子:DateTime?
问题是Convert.ToDateTime(fromDate)的类型为DateTime,它不能接受空值,这就是为什么此代码无法以这种形式工作的原因。您有两种选择。如果满足以下条件,则将其更改为常规:
DateTime.MinValue
或将DateTime强制转换为可为null的DateTime:
http://www.dotnetperls.com/nullable-datetimeC#中的三元运算符需要两个值都具有相同的类型,并在
if(fromDate != null) { Convert.ToDateTime(fromDate) }
中进行了说明。
fromDate == null ? null : (DateTime?)Convert.ToDateTime(fromDate)
希望对您有帮助
您必须使用String.IsNullOrEmpty来检查fromDate是否为null,如下所示: