更改double for循环中的值或使用linq
本文关键字:linq double for 循环 更改 | 更新日期: 2023-09-27 18:04:49
我想为二维List
写这样的双for loop
,它抛出了一个错误cannot be assigned to it is read only
那么如何修改它?(也许我们可以建立一个新的变量,但PositionList
的类型是非常复杂的)顺便说一下,有没有一个简单的方法来使用linq
来改变List
?
for (int i = 0; i < PositionList.Count - 1; i++)
{
for (int j = 0; j < PositionList[i].Count; j++)
{
if (Math.Abs(PositionList[i][j].DesignPosition - PositionList[i][j].Position) < T)
{
PositionList[i][j].DesignPosition = PositionList[i][j].Position;
PositionList[i + 1][j].Position = PositionList[i][j].DesignPosition;
}
}
}
以下是PositionList
, pairList
和AddTwoList
已存在列表的代码:
var PositionList = pairList.GroupBy(o => o.pair.Item1.Date)
.Select(o =>
{
int Position = 0;
var SumPosition = AddTwoList.GroupBy(p => p.Key)
.Select(p => new {
DesignPosition = p.Sum(q => q.DesignPosition),
Position
}).ToList();
return SumPosition;
}).ToList();
So
- 至于使用linq来更新对象- linq是用于查询而不是更新,所以除非你想在
if
语句中创建新对象,否则linq不是方向。 - 至于你的错误
cannot be assigned to it is read only
-你正在使用的对象集合是由linq生成的,是一个匿名类型的集合。匿名类型的属性是read-only
,这解释了错误。
不进入你的linq逻辑,最简单的解决方法是创建一个类,你的linq将初始化它的实例,而不是一个匿名类型:
public class YourClass
{
public int Position { get; set; }
public int DesignPosition { get; set; }
}
var PositionList = pairList.GroupBy(o => o.pair.Item1.Date)
.Select(o => AddTwoList.GroupBy(p => p.Key)
.Select(p => new YourClass {
DesignPosition = p.Sum(q => q.DesignPosition),
Position = 0
}).ToList())
.ToList();
for (int i = 0; i < PositionList.Count - 1; i++)
{
for (int j = 0; j < PositionList[i].Count; j++)
{
if (Math.Abs(PositionList[i][j].DesignPosition - PositionList[i][j].Position) < T)
{
PositionList[i][j].DesignPosition = PositionList[i][j].Position;
PositionList[i + 1][j].Position = PositionList[i][j].DesignPosition;
}
}
}