如何将可空的DateTime
转换为可空的DateOnly
?所以DateTime?
到DateOnly?
错误提示:
错误CS0029不能隐式转换类型"System.DateOnly"?"System.DateTime ?'
我可以从DateTime
转换为DateOnly
执行:
DateOnly mydate = DateOnly.FromDateTime(mydatetime);
但是空值呢?
我有一个方法,但我认为不是最好的主意。
让我们创建一个与FromDateTime
完全相同的方法,只是作为DateTime
的扩展调用:
public static DateOnly ToDateOnly(this DateTime datetime)
=> DateOnly.FromDateTime(datetime);
现在可以使用空条件成员访问操作符?.
将该方法提升为可空的版本:
var myNullableDateOnly = myNullableDateTime?.ToDateOnly();
不幸的是,c#没有"条件为空的静态方法调用操作符"。因此,我们需要这个"扩展方法的变通方法"。
您可以创建一个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();
注意:未测试,可能有提示错误…
public static DateOnly? ToNullableDateOnly(this DateTime? input)
{
if (input == null) return null;
return DateOnly.FromDateTime(input.Value);
}
我只是创建了这个方法,如果有人有另一个更好的,我很乐意接受它作为答案
public DateOnly? NullableDateTime_To_NullableDateOnly(DateTime? input) {
if (input != null)
{
return DateOnly.FromDateTime(input ?? DateTime.Now); //this is irrelevant but...
}
return null;
}