c# - 如何在访问 DateTime 时不出错? .NET 中的属性是否继续?

我有一个循环遍历可空的 DateTimes,如果它们为空,则 continues 循环,如果不是,则使用它们的 Year 和 Month 属性。

这是一个简化的例子:

public static void Main()
{
    var dateTimes = GetDateTimes();
    
    foreach (var dateTime in dateTimes)
    {
        if (dateTime is null)
            continue;
        
        Console.WriteLine(dateTime.Year.ToString(), dateTime.Month.ToString());
    }
}

public static IEnumerable<DateTime?> GetDateTimes()
{
    return new List<DateTime?> { new DateTime(2021, 03, 22), null, DateTime.Now };
}

但是,C# 似乎无法判断,在 if-continue 之后,dateTime 项不为空,并且不允许我访问其属性。

即使有 if (dateTime != null) 它仍然抱怨?

有没有办法让 C# 确认正确的类型,最好使用 if-continue 结构?

该项目使用 .NET Core 3.1。

https://dotnetfiddle.net/lGYDd6

回答1

使用 dateTime.GetValueOrDefaultdateTime.Value 解决了这个问题。

相似文章

最新文章