如何使用三元运算符检查空值或日期时间值

本文关键字:空值 检查 日期 时间 运算符 三元 何使用 | 更新日期: 2023-09-27 18:31:22

我想在 c# 中使用三元运算符检查传递的值是空值还是日期时间值?

我试过这样

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

收到错误:

type of conditional expression cannot be determined

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

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

如何使用三元运算符检查空值或日期时间值

?: Operator

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

condition ? first_expression : second_expression;

Convert.ToDateTime返回DateTime,并且nullDateTime之间没有隐式转换条件运算符是一个表达式,需要返回类型。

对我来说,使用DateTime.TryParse(返回boolean)作为第一个表达式并使用另一个布尔值(truefalse)作为第二个表达式,一个选项似乎是合乎逻辑的。达米斯的回答似乎是合乎逻辑的。

或者,您可以使用可为空的日期时间,例如DateTime?

DateTime? foo;
if(foo.HasValue)
{
   //Nullable DateTime has a value..
}

如果您有fromDate的字符串值,请执行以下操作

DateTime dt;
bool isValidDate =  String.IsNullOrEmpty(fromDate) ? false : DateTime.TryParse(fromDate, out dt); 

如果您知道您输入的日期时间格式/格式,您最好使用DateTime.TryParseExact方法

如果fromDate是日期时间,那么简单你可以检查如下

fromDate.HasValue

你不需要?: Operator

问题是 Convert.ToDateTime(fromDate) 的类型是 DateTime,它不能接受空值,这就是为什么此代码在这种形式中不起作用的原因。您有两个选择。如果出现以下情况,请将其更改为常规:

if(fromDate != null)
{
        Convert.ToDateTime(fromDate)
}

或者将日期时间转换为可为空的日期时间:

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

C# 中的三元运算符需要两个值的类型相同,此处对此进行了说明。

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

nullConvert.ToDateTime(fromDate)没有通用类型。编译器必须能够将候选运算符中的两个表达式强制转换为同一类型。

我希望它能帮助你

   string format = "ddd dd MMM h:mm tt yyyy";
    DateTime dateTime;
    fromDate=(DateTime.TryParseExact(fromDate, format, CultureInfo.InvariantCulture,
        DateTimeStyles.None, out dateTime))?dateTime:null;

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

DateTime? date = String.IsNullOrEmpty(fromDte) ? null : (DateTime?)Convert.ToDateTime(fromDate)

看起来主要问题是您正在尝试将null分配给DateTime

DateTime 是一个结构而不是引用类型,因此无法执行此操作。

使用可为空的日期时间 ( DateTime? ) 或特定值来指示空,例如DateTime.MinValue

看看这里的例子:http://www.dotnetperls.com/nullable-datetime