我需要改變列表中的項目使用嵌套的/ foreach循環。 問題是,我無法使用帶有或不帶點表示法的LINQ工作。 傳統的方式工作,是這樣的:嵌套的foreach改變列表項
foreach (MapObjectLayer mapObjectLayer in map.Objects)
{
foreach (MapObject mapObject in mapObjectLayer.MapObjects)
{
for (int i = 0; i < mapObject.Points.Count; i++)
{
mapObject.Points[i] = new Vector2(
mapObject.Points[i].X * map.Scale,
mapObject.Points[i].Y * map.Scale);
}
}
}
使用LINQ,這個失敗:
var test = (from mol in map.Objects
from mo in mol.MapObjects
from p in mo.Points
select p).ToList();
for (int i = 0; i < test.Count(); i++)
{
test[i] = new Vector2(
test[i].X * map.Scale,
test[i].Y * map.Scale);
}
這失敗:
map.Objects.ForEach(l => l.MapObjects.ForEach(t => t.Points.ForEach(p => p = p * map.Scale)));
如果我能得到點符號變種工作我會很高興,但我不知道爲什麼它失敗。 使用調試器很明顯,通過檢查點列表可以看出,使用兩個LINQ變量,矢量沒有相乘。
更新:Vector2是一個結構
更新:這裏是兩個單行,我發現(工作的):
map.Objects.SelectMany(m => m.MapObjects).ToList().ForEach(o => o.Points = o.Points.Select(p => p * 2).ToList());
map.Objects.ForEach(l => l.MapObjects.ForEach(t => t.Points = t.Points.Select(p => p * 2).ToList()));
爲什麼你需要將它轉換爲LINQ? – undefined
你爲什麼要使用LINQ? LINQ用於*查詢*,而不是*更新*。 –
我認爲LINQ實際上可能會變慢,您是否在尋找一個「很酷的單線程」? –