将可为空的日期时间数组转换为可为空的双精度值的更简洁的方法
本文关键字:双精度 方法 简洁 时间 日期 数组 转换 | 更新日期: 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()