int型のリスト内のすべての数値を四角形にしようとしています。しかし、コードを実行すると、リストはまったく変更されないように見えます。linq文で値を再割り当てできません
public static List<int> SquareList(List<int> root)
{
root.ForEach(x => x = x*x);
return root;
}
x_unitのテストクラス。
[Fact]
public void testSqures()
{
var input = new List<int> { 1, 2, 3 };
var expected = new List<int> { 1, 4, 9 };
var result = Square.SquareList(input);
Assert.Equal(expected,result);
}
質問foreach
オペレータは、基礎となるオブジェクトを変更しないのですか?
新しいリストを作成する必要はありますか?またはその場所でリストを変換する方法がありますか?
return root.Select(x => x*x).ToList();
これに
の、そのようなことを行うために定期的に'デリゲートの本体で基になるコレクションを変更することですサポートされていないため、未定義の動作が発生します。 –
Vikhram
for
ループを使用する必要があります: 'アクションあなたは値型で作業しており、値型は 'Action'デリゲートでは更新できません。間違いなく新しいリストを作成する必要があります。 – NoviceProgrammer