次の呼び出しがフィールドに加えられた変更を覚えていないように見えることを発見したのは驚きでした。
private void Foo(IEnumerable<Blopp> blopps)
{
foreach (Blopp blopp in blopps)
blopp.SomeField = PREFIX + blopp.SomeField;
String test = blopps.First().SomeField;
}
LINQ to dataを使用して配列を取得する場合、テスト変数にはプレフィックスがありません。フィールドへの変更を維持するには、 IEnumerableを評価してリストにする必要があります。なんでそうなの?プログラムは、フィールドが後で使用されていることを認識し、それを評価することを期待します。
private void Foo(IEnumerable<Blopp> _blopps)
{
List<Blopp> blopps = _blopps.ToList();
foreach (Blopp blopp in blopps)
blopp.SomeField = PREFIX + blopp.SomeField;
String test = blopps.First().SomeField;
}