4

How can I replace all DateTime?s where the date is null with DateTime.MaxValue?

I have tried:

Array.ConvertAll(myDateTimeArray, a => a = a.HasValue ? a : DateTime.MaxValue);

and also:

myDateTimeArray.Where(a => a == null).ToList().ForEach(a => a = DateTime.MaxValue);

After that I want to do something like:

DateTime minDate = myDateTimeArray.Min(a => a.Value);

but I am getting an InvalidOperationException because a.Value is null...

4

3 回答 3

7

你可以这样做:

myDateTimeArray = myDateTimeArray.Select(dt => dt ?? DateTime.MaxValue).ToArray();

这将替换整个数组,而不是其单个元素。如果您需要替换单个元素,请改用for循环。

于 2013-05-28T13:26:36.510 回答
3

使用Enumerable.Select将日期投影到新数组中:

var newArray = myDateTimeArray.Select(x => x ?? DateTime.MaxValue).ToArray();

null 合并运算符( )??如果不为 null,则返回左侧操作数,否则返回右侧操作数。

于 2013-05-28T13:27:43.657 回答
0

Enumerable.Min 方法没有采用(或)值集合的DateTime重载DateTime?。您可以使用Enumerable.Aggregate 方法来实现您自己的Min方法:

DateTime? result = myDateTimeArray.Where(x => x != null)
                                  .DefaultIfEmpty(null)
                                  .Aggregate((x, y) => x < y ? x : y);

null如果myDateTimeArray为空或所有元素myDateTimeArray都返回,则返回,否则返回null最小值。DateTimemyDateTimeArray

于 2013-05-28T13:30:48.783 回答