gpt4 book ai didi

c# - 包含 Namespace.ClassName.b__f 的堆栈跟踪是什么意思?

转载 作者:行者123 更新时间:2023-12-04 00:46:30 24 4
gpt4 key购买 nike

我有一个来自用户的错误日志,其中包含我不完全理解的堆栈跟踪。这是它的样子

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
}

对于它的值(value),我很确定我知道是什么导致了错误(即错误的 Actor 在哪里),但我真正好奇的是 <GetCounts>b__f(...)堆栈跟踪中的成员。

最佳答案

如果您使用 Reflector、dotPeek 等打开程序集,您会看到编译器已将 lambda 表达式的逻辑放在 GetCounts 中。进入另一种方法 - 在本例中为 <GetCounts>b__f .这对于 lambda 表达式和匿名方法来说是完全正常的 - 一些其他 C# 功能(迭代器 block 、匿名类型、自动实现的方法等)也会自动为您创建成员。

名称中的尖括号很好地表明它是由编译器生成的:编译器使用了一个无法形容的名称 - 一个不是有效标识符的名称 - 以确保不仅不会与您的其他成员发生任何冲突,但您也永远无法在代码中引用这些“隐藏”成员。

关于c# - 包含 Namespace.ClassName.<MethodName>b__f 的堆栈跟踪是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9200829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com