Как описал Эрик Липперт в в этой статье, yield return
нельзя использовать в try/catch
пунктах.
Есть ли хороший способ получить что-то вроде этого без необходимости писать свои собственные IEnumerator
вручную:
public IEnumerable<Data> GetData()
{
var transaction = Session.BeginTransaction());
try
{
IQuery q = CreateQuery(session);
foreach (var result in q.Enumerable())
yield return ProjectResult(result); // <-- doesn't work
session.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
throw;
}
finally
{
transaction.Dispose();
}
}