正在检查返回的项是否为null

本文关键字:是否 null 检查 返回 | 更新日期: 2023-09-27 18:26:57

目前我正在返回一个项目列表,所有项目都有一个日期范围。有些预约已经过期,有些还没有预约。我正在显示尚未过期的约会。但我想检查一下是否所有申请都已过期,然后显示第一项。

var curApt = myAppts.Where(d => d.Appt.EndTime > DateTime.UtcNow).First();

如果myAppts.Where(d => d.Appt.EndTime > DateTime.UtcNow) == null

var curApt = myAppts.First();

我如何构建这两种情况?

正在检查返回的项是否为null

FirstOrDefault和零合并运算符(??):

var curApt = myAppts.FirstOrDefault(d => d.Appt.EndTime > DateTime.UtcNow)
             ?? myAppts.First();

然而,如果你有一个默认值来显示,你可以让这种情况更不容易发生异常。如果根本没有预约,你可以为此链接空合并运算符:

var curApt = myAppts.FirstOrDefault(d => d.Appt.EndTime > DateTime.UtcNow)
             ?? myAppts.FirstOrDefault() ?? yourDefault;

您可以使用FirstOrDefault方法:

var curApt = myAppts.FirstOrDefault(d => d.Appt.EndTime > DateTime.UtcNow);

查找第一个未过期的约会,如果所有约会都已过期,则查找null。因此,在这种情况下,要将其默认为第一次约会,您可以使用以下命令:

var curApt = myAppts.FirstOrDefault(d => d.Appt.EndTime > DateTime.UtcNow);
if (curApt == null) 
{
    curApt = myAppts.First();
}

或者,为了简洁起见,您可以使用空合并运算符(??):

var curApt = myAppts.FirstOrDefault(d => d.Appt.EndTime > DateTime.UtcNow)
          ?? myAppts.First();

听起来你想在这里使用.FirstOrDefault()

var curApt = myAppts.Where(d => d.Appt.EndTime > DateTime.UtcNow).FirstOrDefault();
if (curApt == null) {
    // no expirations
    curApt = myAppts.First();
}

使用FirstOrDefault()而不是First(),在第一条语句之后检查curApt是否为null,如果为null,则检查第二条语句。