私はかなり奇妙な構造に直面しています。IEnumerable で返される Foo 型は、列挙が終了するとすぐにデータを失います。これは、データがすぐに失われるため、enumeration.First() を実行できないことを意味します。
ループは機能しますが、奇妙な要素が1つしか含まれないことがわかっているためです。
int Test(out int something)
IEnumerable<Foo> enumeration = ...
for (var foo in enumeration) {
something = foo.GetSomething ();
return foo.GetAnInt ();
}
something = 42;
return 0;
}
私が考える別の方法は、Linq Select を悪用することですが、それも同様に恐ろしいことです。
この制限を回避する方法はありますか? 根本原因を修正することは明らかに優れていますが、この場合は困難です。
編集:これIEnumerable<IDataRecord>
はyield returned
、トランザクション化された SQL データ リーダーからのものです。
public IEnumerable<IDataRecord> ExecuteReader (SqlCommand cmd)
{
using (var con = GetConnection()) {
con.Open ();
using (var tr = con.BeginTransaction ()) {
cmd.Connection = con;
var reader = cmd.ExecuteReader ();
while (reader.Read ()) {
yield return reader;
}
tr.Commit ();
}
}
}