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

问题描述

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

“委托分配:捕获'this'引用”

我在谷歌上搜索了这个,但没有找到任何东西。

enter image description here

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

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

解决方法

这是关于 lambda 捕获外部上下文(docs about capturing a local variable,或者在 SO 上有 some 答案)。似乎 initRemoteConfig 是包含此代码的类上的字段/属性,因此您的 lambda 需要捕获此类的当前实例。

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

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

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