C# 将可为空的datetime数组转换为可为空的double数组的更干净的方法?

C# 将可为空的datetime数组转换为可为空的double数组的更干净的方法?,c#,.net,nullable,C#,.net,Nullable,我有一个: 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)?((d

我有一个:

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();
如果不检查t上的方法是否为null(因此是第三个运算符),我就无法调用该方法,而且我还必须合并它,以便调用OADate(因此合并和填充DateTime.MinValue将永远不会被命中)

它在一行中完成了任务,但看起来有点像perl

也许是一种扩展方法?这样我就可以隐藏丑陋,然后按照以下思路做一些事情:

dates.ToNullableOADates();

不知道你为什么有t

你就不能做

Double?[] oaDates = 
   dates.Select(t => (t == null) ? (double?)null : t.Value.ToOADate()).ToArray();

实际上,您可以在
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();

伟大的那正是我要找的!如果你这样做,就称之为ToOADate:)我真的不知道Value属性(现在我真的很感谢)。没有它,我需要空合并操作符(??)。
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()