如何使用DateTime?
替换日期为null
的所有DateTime.MaxValue
?
我试过了:
Array.ConvertAll(myDateTimeArray, a => a = a.HasValue ? a : DateTime.MaxValue);
还有:
myDateTimeArray.Where(a => a == null).ToList().ForEach(a => a = DateTime.MaxValue);
之后我想做类似的事情:
DateTime minDate = myDateTimeArray.Min(a => a.Value);
但我收到了InvalidOperationException
,因为a.Value
是null
...
答案 0 :(得分:7)
你可以这样做:
myDateTimeArray = myDateTimeArray.Select(dt => dt ?? DateTime.MaxValue).ToArray();
这将替换整个数组,而不是其各个元素。如果您需要替换单个元素,请改为使用for
循环。
答案 1 :(得分:3)
使用Enumerable.Select将日期投影到新数组中:
var newArray = myDateTimeArray.Select(x => x ?? DateTime.MaxValue).ToArray();
null-coalescing operator(??
)返回左侧操作数(如果它不为空),否则返回右操作数。
答案 2 :(得分:0)
Enumerable.Min Method没有带有DateTime
(或DateTime?
)值集合的重载。您可以使用Enumerable.Aggregate Method来实现自己的Min
方法:
DateTime? result = myDateTimeArray.Where(x => x != null)
.DefaultIfEmpty(null)
.Aggregate((x, y) => x < y ? x : y);
如果null
为空,或myDateTimeArray
中的所有元素均为myDateTimeArray
,或null
中的最小DateTime
值,则会返回myDateTimeArray