중첩 for/foreach 루프를 사용하여 목록의 항목을 변경해야합니다. 문제는 점 표기법 사용 여부에 관계없이 LINQ를 사용하여 작동하지 못하는 것입니다. 전통적인 방법이 근무하고 같이 간다 : 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);
}
}
}
이 실패 :
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 변형을 사용하여 곱 해지지 않았다는 점을 Points 목록에서 확인하는 것이 분명합니다.
업데이트 : 여기 내가 찾은 두 개 더 한 라이너 (일하는 사람)입니다 : 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가 실제로 더 느릴 수도 있다고 생각합니다. "멋진 한 줄자"를 찾고 있습니까? –