隐式转换类型 System.DateTime 的推荐方法是什么?到 System.DateOnly?

What's the recommend way to implicitly convert type System.DateTime? to System.DateOnly?

如何将可为空的 DateTime 转换为可为空的 DateOnly? 所以 DateTime?DateOnly?

错误说:

Error CS0029 Cannot implicitly convert type 'System.DateOnly?' to 'System.DateTime?'

我可以通过以下操作将 DateTime 转换为 DateOnly

DateOnly mydate = DateOnly.FromDateTime(mydatetime);

但是可为空值呢?

我有办法,但我认为这不是最好的主意...

我只是创建了这个方法,如果有人有更好的方法,我很乐意接受它作为答案

    public DateOnly? NullableDateTime_To_NullableDateOnly(DateTime? input) {
        if (input != null)
        {
            return DateOnly.FromDateTime(input ?? DateTime.Now); //this is irrelevant but...
        }
        return null;
    }

您可以创建 DateTime 扩展方法:

public static class DateTimeExtends
{
    public static DateOnly ToDateOnly(this DateTime date)
    {
        return new DateOnly(date.Year, date.Month, date.Day);
    }

    public static DateOnly? ToDateOnly(this DateTime? date)
    {
        return date != null ? (DateOnly?)date.Value.ToDateOnly() : null;
    }
}

并在任何 DateTime 实例上使用:

DateOnly date = DateTime.Now.ToDateOnly();

注意:未测试,可能有 tipo 错误...

public static DateOnly? ToNullableDateOnly(this DateTime? input) 
{
    if (input == null) return null;
    return DateOnly.FromDateTime(input.Value);
}

让我们创建一个与 FromDateTime 完全相同的方法,只是在 DateTime 上作为扩展调用:

public static DateOnly ToDateOnly(this DateTime datetime) 
    => DateOnly.FromDateTime(datetime);

现在您可以使用 null-conditional 成员访问运算符 ?. 将此方法提升到可空版本:

var myNullableDateOnly = myNullableDateTime?.ToDateOnly();

不幸的是,C# 没有“null-conditional 静态方法调用运算符”。因此,我们需要这个“扩展方法解决方法”。