我有一个使用堆栈跟踪的用户的错误日志,我不完全理解。下面是它的外观什么是堆栈跟踪包括Namespace.ClassName。 <MethodName> b__f是什么意思?
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[...](...)
后调用。我认为这与谓词有关,但我不能完全解释这一点。
如果它有助于例外是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
}
对于什么是值得我敢肯定,我知道(在坏的演员阵容IE)是什么引起的错误。但我真的很好奇的是,<GetCounts>b__f(...)
成员在堆栈跟踪。
看起来像自动生成的代码。典型的来源是lambdas,'yield'-iterators和C#5的'async'-方法。在你的情况下,它显然是lambda。 – CodesInChaos 2012-02-08 20:37:45