'List <t> .ForEach()'和mutability </t>

时间:2011-02-17 20:55:28

标签: c# list foreach mutability

我想翻译List<T>中的所有点数。这有效:

for (int i = 0; i <PolygonBase.Count; ++i) 
{
    PolygonBase[i] = PolygonBase[i] + MousePos;
}

但使用List<T>.ForEach不会:

PolygonBase.ForEach(v => v += MousePos);

想法?

2 个答案:

答案 0 :(得分:11)

您当前的代码只是将本地变量v重新分配给新值 - 它不会返回列表中的原始值。这相当于写作:

foreach(int v in PolygonBase)
{
    v += MousePos;
}

要回写原始值,请使用ConvertAll

PolygonBase.ConvertAll(v => v += MousePos);

答案 1 :(得分:0)

ForEach不可变,它不会以任何方式改变数据结构。 看看这个威胁。 Using conditional lambda statements with a foreach Action on a list