検証メソッドを実行するための簡単なテストを行っていたところ、この奇妙な状況に遭遇しました。
public IEnumerable<int> ints (List<int> l)
{
if(false)yield return 6;
l.Add(4);
}
void Main()
{
var a = new List<int>();
var b = new List<int>();
for( int i = 0; i < 4; i++ ){
a.Add(i);
b.Add(i);
}
a.AddRange(ints(a));
ints(b);
Console.WriteLine(a);
Console.WriteLine(b);
}
このコードが実行されると、a
が含まれます[0,1,2,3,4]
。ただし、b
が含まれます[0,1,2,3]
。メソッドを引数として呼び出すとAddRange
、リストを参照渡しできるのはなぜですか? または、それが起こらなかった場合、何が起こったのですか?