2

我有一个:

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 上调用方法而不检查它是否为空(因此是三级运算符),我也必须合并它以便我可以调用 OADate(因此永远不会命中的合并和填充 DateTime.MinValue)。

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

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

dates.ToNullableOADates();
4

4 回答 4

3

您实际上可以在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();
于 2012-05-18T05:30:11.453 回答
2

不知道你为什么有t??

你就不能...

Double?[] oaDates = 
   dates.Select(t => (t == null) ? (double?)null : t.Value.ToOADate()).ToArray();
于 2012-05-18T05:05:26.383 回答
0
var array = dates.Select(t => t.HasValue ? t.Value.ToOADate() : (double?)null).ToArray();
于 2012-05-18T05:52:03.970 回答
0
 dates.Select( t=> t==default(DateTime?) || t.HasValue==false ? (double?)(null):t.Value.ToOADate() ).ToArray()
于 2012-05-18T05:57:53.457 回答