C# 11:VS 2022 不支持“field”关键字

问题描述 投票:0回答:4

我有一个 .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# visual-studio c#-11.0
4个回答
8
投票

根据 C# GitHub 存储库中的 this comment

field
关键字的实现存在问题,因此它没有进入 C# 11。它可能(也可能不会)出现在 C# 12 中。


2
投票

这似乎是 R# bug(所以我建议报告它或尝试检查是否有更新)。 ATM 在 C# 中没有

field
关键字(关键字列表),并且此类功能未在 C# 11 和 .NET 7 发布的版本中列出(docs),因为它已从版本中删除(github 讨论) .


1
投票

共识(和 Microsoft)似乎认为,尽管页面这么说,尽管 JetBrains ReSharper 这么认为,但 C# 11 中毕竟不支持

field
关键字。

我已向 JetBrains 提交了一份错误报告,告诉他们他们可能不想提供不好的建议。 对此感兴趣的任何人都可以按照以下请求:https://resharper-support.jetbrains.com/hc/en-us/requests/4782760

谢谢大家!


0
投票

2024年11月12日更新

现在在 Visual Studio 2022 中使用 .NET 9 在 C# 13 中完全支持使用

field
关键字访问自动属性的支持字段。

您只需在 .csproj 文件中设置预览语言版本即可:

<LangVersion>preview</LangVersion>.
© www.soinside.com 2019 - 2024. All rights reserved.