我正面临一个非常奇怪的结构。一旦枚举结束,IEnumerable 中返回的 Foo 类型就会丢失其数据。这意味着我不能进行 enumeration.First() 因为数据会立即丢失。
对其进行循环有效,但因为我知道它只会包含一个奇怪的元素。
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 ();
}
}
}