【发布时间】:2012-02-09 04:27:08
【问题描述】:
我有一个来自用户的错误日志,其中包含我不完全理解的堆栈跟踪。这是它的外观
Stack Trace:
at ...Presenters.Forms.PresenterHome.<GetCounts>b__f(IActivityItem activityItem)
at System.Linq.Enumerable.Count[TSource](IEnumerable`1 source, Func`2 predicate)
at ...Presenters.Forms.PresenterHome.GetCounts(Int32& completeCount, Int32& incompleteCount)
at ...Presenters.Forms.PresenterHome.UpdateSummaryPanel()
.....
(我已经删除了一些命名空间的开头以保护客户的身份)
我不明白的部分是<GetCounts>b__f(...) 以及为什么在Enumerable.Count[...](...) 之后调用它。我认为它与Count 谓词有关,但我无法完全理解这一点。
如果有帮助,例外是InvalidCastException。以下是一些涉及的代码(稍作修改以保护身份)。
void UpdateSummaryPanel()
{
int completeCount;
int incompleteCount;
GetCounts(out completeCount, out incompleteCount);
...
}
private void GetCounts(
out int completeCount,
out int incompleteCount)
{
incompleteCount = _applicationContext.ActivityItems.Count(
activityItem => activityItem.ActivityType == ActivityTypes.Foo
&& ((FooActivity) activityItem).Status != CaptureStatus.Bar);
// similar code for other count
}
对于它的价值,我很确定我知道导致错误的原因(即错误的演员表在哪里),但我真正好奇的是堆栈跟踪中的 <GetCounts>b__f(...) 成员。
【问题讨论】:
-
看起来像自动生成的代码。典型的来源是 lambdas、
yield-iterators 和 C#5 的async-methods。在你的情况下,它显然是 lambda。
标签: c# stack-trace