我有一个:
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();
答案 0 :(得分: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();
答案 1 :(得分:2)
不确定你为什么会这样做?
你不能这么做......
Double?[] oaDates =
dates.Select(t => (t == null) ? (double?)null : t.Value.ToOADate()).ToArray();
答案 2 :(得分:0)
var array = dates.Select(t => t.HasValue ? t.Value.ToOADate() : (double?)null).ToArray();
答案 3 :(得分:0)
dates.Select( t=> t==default(DateTime?) || t.HasValue==false ? (double?)(null):t.Value.ToOADate() ).ToArray()