如何使用三元运算符检查null或datetime值?

问题描述 投票:1回答:7

我想使用c#中的三元运算符检查传递的值是否为null或datetime值?

我尝试过这样

fromDate == null ? null : Convert.ToDateTime(fromDate)

获取错误:

type of conditional expression cannot be determined

我想检查变量fromDate是否为null或是否具有日期时间值?

变量fromDate来自查询字符串和字符串类型。

c# asp.net ternary-operator
7个回答
4
投票

来自?: Operator

first_expression和second_expression的类型必须相同,或者必须存在从一种类型到另一种类型的隐式转换。

?: Operator

condition ? first_expression : second_expression; 返回Convert.ToDateTime,并且在Convert.ToDateTimeDateTime之间没有隐式转换条件运算符是一个表达式,需要返回类型。

对我来说,使用null(返回DateTime)作为第一个表达式并使用另一个布尔值(DateTime.TryParseboolean)作为第二表达式对我来说似乎是一个逻辑选择。 true似乎合乎逻辑。

或者,您可以使用可空的DateTime,例如false

Damiths' answer

1
投票

如果您具有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


0
投票

似乎主要问题是您试图将fromDate.HasValue 分配给?: Operator

DateTime是一个结构而不是引用类型,因此无法完成。

或者使用可为空的DateTime(null)或使用特定值来表示空值,例如DateTime

这里看一个例子:DateTime?


0
投票

问题是Convert.ToDateTime(fromDate)的类型为DateTime,它不能接受空值,这就是为什么此代码无法以这种形式工作的原因。您有两种选择。如果满足以下条件,则将其更改为常规:

DateTime.MinValue

或将DateTime强制转换为可为null的DateTime:

http://www.dotnetperls.com/nullable-datetime

C#中的三元运算符需要两个值都具有相同的类型,并在if(fromDate != null) { Convert.ToDateTime(fromDate) } 中进行了说明。


-1
投票
    fromDate == null ? null : (DateTime?)Convert.ToDateTime(fromDate)

-1
投票

希望对您有帮助


-1
投票

您必须使用String.IsNullOrEmpty来检查fromDate是否为null,如下所示:

© www.soinside.com 2019 - 2024. All rights reserved.