委托分配:在 JetBrains Rider 中捕获 'this' 引用

Delegate allocation: capture of 'this' reference in JetBrains Rider

当我在 C# 中编写代码时,我发现箭头函数下方有一条黄线,如图所示,我将光标悬停在它上面,它显示

"Delegate allocation: capture of 'this' reference"

我在 google 上搜索过此内容,但没有找到任何内容。

我还发现,当我删除 initRemoteConfig 字段时,该行消失了。

那么谁能解释这里发生了什么,以及如何消除这个警告?

这是关于 lambda 捕获外部上下文的(docs about capturing a local variable, or there are some 在 SO 上对此的回答)。 initRemoteConfig 似乎是 class 上的 field/property 包含此代码,因此您的 lambda 需要捕获此 class.

的当前实例

此外,这不是内置的骑手检查,它来自 heap allocations viewer,可帮助您防止不必要的分配,但有时您仍然需要分配,因此您不能总是修复此警告(即此插件将始终“警告”任何分配,由您决定是否有必要)。在这种特殊情况下,如果它适合您的上下文,您可以使 initRemoteConfig property/field 成为静态的,即像这样的东西:

private static int initRemoteConfig;
Action x = () =>
{
    initRemoteConfig = 3;
};

不会给你这个警告(但有一些其他缺点)。