如何更改List中的每个元素
本文关键字:元素 何更改 List long | 更新日期: 2023-09-27 18:15:31
我有一个不同的白天(刻度)列表。我试着得到从现在到每个时间元素的剩余时间列表。
List<long> diffliste = new List<long>(m_DummyAtTime);
// 864000000000 ≙ 24h
diffliste.ForEach(item => { item -= now; if (item < 0) item += 864000000000; });
// test, does also not work
// diffliste.ForEach(item => { item -= 500; });
但是,列表没有改变。我错过什么了吗?(now
为DateTime.Now.TimeOfDay.Ticks
)
var times = diffliste.Select(ticks => new DateTime(ticks) - DateTime.Now);
将返回从现在到每次之间的TimeSpans的集合。
不使用Linq:
List<TimeSpan> spans = diffliste.ConvertAll(ticks => new DateTime(ticks) - DateTime.Now);
(根据Marc建议修改)
您正在更改局部变量(实际上是参数)中的独立副本,而不是列表中的实际值。要做到这一点,也许:
for(int i = 0 ; i < diffliste.Count ; i++) {
long val = diffliste[i]; // copy the value out from the list
... change it
diffliste[i] = val; // update the value in the list
}
最终,您当前的代码在语义上类似:
long firstVal = diffliste[0];
firstVal = 42;
其中也不会将列表中的第一个值更改为42(它只会更改局部变量)。
不能更改foreach循环中的项的值。
您可以使用经典的for循环或创建并分配项到新列表。
for (int i = 0 ; i < diffliste.Count; i++)
{
long value = diffliste[i];
// Do here what you need
diffliste[i] = value;
}
foreach循环中的迭代变量是不可变的,因此您不能更改它。你要么创建一个新的列表,要么使用for循环…