この質問は特に構造体に関するものです。
私が定義すると言う:
struct Complex
{
public double real, imaginary;
}
私が試してみると:
var numbers = new[]
{
new Complex() { real = 1, imaginary = 1 },
new Complex() { real = -1, imaginary = -1 }
};
foreach ( var z in numbers )
{
z.real += 1;
}
コンパイルエラーが発生します:Error: cannot modify members of 'complex' because it is a 'foreach iteration variable'
でも、
var numbers = new List<Complex>();
numbers.Add( new Complex() { real = 1, imaginary = 1 } );
numbers.Add( new Complex() { real = -1, imaginary = -1 } );
numbers.ForEach( z => z.real += 1 );
エラーなしでコンパイルします。'foreach'コンパイルエラーを念頭に置いて、ここでコンパイル時エラーを出さない理由はありますか?