【发布时间】:2025-12-12 00:50:02
【问题描述】:
正如 Eric Lippert 在 this article 中所述,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();
}
}
【问题讨论】:
标签: c# transactions idisposable try-catch-finally yield-return