将可为空的日期时间数组转换为可为空的双精度值的更简洁的方法

本文关键字:双精度 方法 简洁 时间 日期 数组 转换 | 更新日期: 2023-09-27 18:34:37

我有一个:

DateTime?[] dates

我需要转换为:

Double?[] oaDates

有什么方法可以清理这一个衬里吗?还是我应该求助于一个功能?

DateTime?[] dates = new DateTime?[]{DateTime.Now, DateTime.Now.AddDays(1), DateTime.Now.AddDays(2)}; //example array
Double?[] oaDates = dates.Select(t => (t==null)?((double?)null):(t??DateTime.MinValue).ToOADate()).ToArray();

如果不检查它是否为 null(因此是第三运算符(,我就无法在 t 上调用方法,并且我还必须合并它,以便我可以调用 OADate(因此合并和填充 DateTime.MinValue 永远不会被命中(。

它可以在一行中完成工作,但它看起来有点像perl。

也许是扩展方法?这样我就可以隐藏丑陋,只做一些类似的事情:

dates.ToNullableOADates();

将可为空的日期时间数组转换为可为空的双精度值的更简洁的方法

您实际上可以在null引用上调用扩展方法。 因此,您可以定义一个扩展方法来将单个DateTime?转换为double?,如下所示:

public static class DateUtil
{
    public static double? ConvertToDouble(this DateTime? date)
    {
        return date.HasValue ? date.Value.ToOADate() : (double?)null;
    }
}

然后这样称呼它:

double?[] oaDates = dates.Select(t => t.ConvertToDouble()).ToArray();

但是,您可以使用方法组语法同样调用它:

double?[] oaDates1 = dates.Select(DateUtil.ConvertToDouble).ToArray();

不知道为什么你有t??

你不能就这样做...

Double?[] oaDates = 
   dates.Select(t => (t == null) ? (double?)null : t.Value.ToOADate()).ToArray();
var array = dates.Select(t => t.HasValue ? t.Value.ToOADate() : (double?)null).ToArray();
 dates.Select( t=> t==default(DateTime?) || t.HasValue==false ? (double?)(null):t.Value.ToOADate() ).ToArray()