我有一个如下列表:
2016-10-05 00:00:00.000
NULL
NULL
NULL
2016-08-12 07:46:00.000
NULL
NULL
我需要转换为
2016-10-05 00:00:00.000
2016-10-05 00:00:00.000
2016-10-05 00:00:00.000
2016-10-05 00:00:00.000
2016-08-12 07:46:00.000
2016-08-12 07:46:00.000
2016-08-12 07:46:00.000
基本上,我需要捕获最后一次出现的日期并将其复制到下一行,直到看到填充的行。
这是我现在看到的工作方式
foreach (var date in dates)
{
var lastValue = null;
if(date != null)
{
lastValue = date;
}
if(date == null)
{
date = lastValue;
}
else
{
lastValue = date;
}
}
答案 0 :(得分:0)
for(int i = 0; i < yourList.Length; i++)
{
if(yourList[i] == null && i - 1 > 0)
{
yourList[i] = yourList[i-1];
}
}
答案 1 :(得分:0)
为此,我将使用一个简单的for
循环
List<DateTime?> dates = new List<DateTime?>()
{
new DateTime( 2016,10,05,00,00,00),
null,
null,
null,
new DateTime( 2016, 08, 12 ,07,46,00),
null,
null
};
DateTime? latest = null;
for (int i = 0; i < dates.Count; i++)
{
if (dates[i] == null)
{
dates[i] = latest;
}
else
{
latest = dates[i];
}
}
答案 2 :(得分:0)
将DateTime类更改为您正在使用的任何类。
DateTime lastValue = NULL;
foreach(var value in ValuesList){
if(value == null)
value = lastValue;
else
lastValue = value;
}
答案 3 :(得分:0)
使用Linq,
//Read first not null date
DateTime? firstNotNullValue = dates.FirstOrDefault(x => x != null);
//Create List using ternary opeartion
var result = dates.Select(x => x.HasValue ? firstNotNullValue = x.Value : firstNotNullValue).ToList();
答案 4 :(得分:0)
您的代码的第一个问题是该行:
var lastValue = null;
不会编译。编译器应该如何知道他应该使用哪种类型?您需要定义类型。
第二个问题是您不能在此行的foreach迭代中分配新值:
date = lastValue;
您将需要使用普通的for循环。
它将引发CS1656编译器错误:
循环的第二个问题是您在每次迭代时都通过重新创建并用null
进行初始化来覆盖最后一个值。因此,您基本上可以清除最后一项的记忆。在循环外声明变量
答案 5 :(得分:0)
//input
List<DateTime?> dates = new List<DateTime?> { DateTime.Now, null, DateTime.Parse("2019-10-01"), null };
DateTime? lastPresentDate = dates.FirstOrDefault();
if (lastPresentDate.HasValue)
{
dates = dates.Select(d => d.HasValue ? lastPresentDate = d : lastPresentDate).ToList();
}
//output
7/23/2019 7:15:48 AM
7/23/2019 7:15:48 AM
10/1/2019 12:00:00 AM
10/1/2019 12:00:00 AM
这只会在出现第一个日期时更正日期,否则将列表保持不变。
答案 6 :(得分:0)
假设您实际上有一个具有其他一些属性的类(例如Product
)
DateTime? lastDate = null;
var result = products.Select(
p =>
new {
Id = p.Id,
CreateDate = (p.CreateDate.HasValue ? (lastDate = p.CreateDate) : lastDate)
//Other properties..
}
);
如果没有,只有日期:
DateTime? lastDate = null;
var result = dates.Select(d => (d.HasValue ? (lastDate = d.Value) : lastDate));
如果愿意,可以添加.ToList()
。