如何操作DateTime列表

Zet*_*Zet 0 c# linq

我有一个DateTime列表和单独的变量DateTime

 List<DateTime> list = new List<DateTime>(); 
 DateTime date;
Run Code Online (Sandbox Code Playgroud)

我试图以这种方式操纵列表:

 list.ForEach(m=>m = new DateTime(date.Year,date.Month,date.Day,m.Hour,m.Minute,m.Second));
        return list;
Run Code Online (Sandbox Code Playgroud)

列表已填写,日期是适当格式的日期,但不起作用.为什么?

Ant*_*ram 5

引用的列表中的项目m不会被您m的lambda表达式中的新赋值更改.您只是覆盖原始值的临时副本,而不是修改列表的项目.

要对列表中的值进行实际更改,请使用索引器编写传统循环以修改内容.

for (int i = 0; i < list.Count; i++)
{
    var m = list[i];
    list[i] = new DateTime(date.Year, date.Month, date.Day, m.Hour, m.Minute, m.Second);
}
Run Code Online (Sandbox Code Playgroud)

如果您不需要观察原始列表中的更改,而是可以(或者甚至希望)生成另一个更改,那么您可以按照注释中的建议操作,并使用Linq生成包含您的修改的列表.

list = list.Select(m => DateTime(date.Year,date.Month,date.Day,m.Hour,m.Minute,m.Second))
           .ToList();
Run Code Online (Sandbox Code Playgroud)

使用最能满足您的用例的技术.

  • ...或使用LINQ创建新列表. (2认同)