IEnumerableでToArray()が呼び出されたときに何が起こるか理解できません。私はいつも参照のみがコピーされていると仮定してきました。IEnumerableでToArray()が呼び出されるとどうなりますか?
私はここでの出力があることを期待する:ここで何が起こっているか 真 真
しかし、その代わりに、私は 真 偽
を取得しますか?
class One {
public bool Foo { get; set; }
}
class Two
{
public bool Foo { get; set; }
}
void Main()
{
var collection1 = new[] { new One(), new One() };
IEnumerable<Two> stuff = Convert(collection1);
var firstOne = stuff.First();
firstOne.Foo = true;
Console.WriteLine (firstOne.Foo);
var array = stuff.ToArray();
Console.WriteLine (array[0].Foo);
}
IEnumerable<Two> Convert(IEnumerable<One> col1) {
return
from c in col1
select new Two() {
Foo = c.Foo
};
}
明らかにするには、問題は、反復と各列挙時の新しいオブジェクトの作成の組み合わせによる問題です。列挙によって元のオブジェクトが返された場合(新しいインスタンスを作成せずに)、反復処理で元の更新オブジェクトが引き続き取得されます。 –