我有一个 .NET 7.0 WinForms 项目,在其属性中声称将语言版本设置为 11.0(并且我在 .csproj 中进行了操作以使其成为“最新”和“预览”等)。
ReSharper 的检查表明我可以在很多地方使用
field
关键字,但是当我这样做时,VS 讨厌重构的结果,并且我收到编译错误(“名称‘字段’在当前上下文中不存在”)等)。
我完全不知道为什么我的 VS(我什至尝试过预览版——我使用的是 Professional 2022 版本 17.5.0 预览版 6.0)不想喜欢 C# 11。
这是我安装的 SDK 的内容,以防出现问题...
C:\>dotnet --list-sdks
7.0.103 [C:\Program Files\dotnet\sdk]
7.0.200-preview.22628.1 [C:\Program Files\dotnet\sdk]
7.0.200 [C:\Program Files\dotnet\sdk]
这是产生错误的代码区域之一。
之前
private int _updateDepth; // this is "grayed" by R# with hint to address
private int UpdateDepth
{
get => _updateDepth;
set
{
_updateDepth = value;
if (!SkipHandlers && !SkipCallbacks && UpdateDepth is 0)
RunGameDataChangedCallback();
}
}
之后
private int UpdateDepth
{
get;
set
{
field = value;
if (!SkipHandlers && !SkipCallbacks && UpdateDepth is 0)
RunGameDataChangedCallback();
}
}
我也尝试过(因为在阅读有关 field 关键字时,似乎说该属性必须初始化)在最后的结束大括号之后添加
= 0;
,但这没有帮助。
编译器错误
CS0501 'GameControl.UpdateDepth.get' must declare a body because it is not marked abstract, extern, or partial
CS0103 The name 'field' does not exist in the current context
有什么想法吗?
根据 C# GitHub 存储库中的 this comment,
field
关键字的实现存在问题,因此它没有进入 C# 11。它可能(也可能不会)出现在 C# 12 中。
共识(和 Microsoft)似乎认为,尽管页面这么说,尽管 JetBrains ReSharper 这么认为,但 C# 11 中毕竟不支持
field
关键字。
我已向 JetBrains 提交了一份错误报告,告诉他们他们可能不想提供不好的建议。 对此感兴趣的任何人都可以按照以下请求:https://resharper-support.jetbrains.com/hc/en-us/requests/4782760
谢谢大家!
2024年11月12日更新
现在在 Visual Studio 2022 中使用 .NET 9 在 C# 13 中完全支持使用
field
关键字访问自动属性的支持字段。
您只需在 .csproj 文件中设置预览语言版本即可:
<LangVersion>preview</LangVersion>.