我有一個使用堆棧跟蹤的用戶的錯誤日誌,我不完全理解。下面是它的外觀什麼是堆棧跟蹤包括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