我有一个循环遍历可空的 DateTime
s,如果它们为空,则 continue
s 循环,如果不是,则使用它们的 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。
回答1
使用 dateTime.GetValueOrDefault
或 dateTime.Value
解决了这个问题。