gpt4 book ai didi

c# - Lambda 参数名称(有时)与本地名称冲突

转载 作者:行者123 更新时间:2023-12-02 10:40:38 24 4
gpt4 key购买 nike

有两个项目,一个是面向 .NET Standard 2.0 的库,另一个是面向 .NET Core 2.2 的控制台应用程序。

现在这段代码适用于 .NET Standard 2.0 库,但不适用于 .NET Core 2.2。

for (int i = 0; i < 1; i++) {
var y = new int[1].First(i => i == 0); // Conflict i name error here in .NET Core 2.2.
Console.WriteLine("Hello " + y);
}

我明白 from this question简单的名称不应具有不同的含义,因此,即使 .NET Standard 2.0 库也应该给出错误,但事实并非如此。为什么会出现这种不一致?

我尝试过 dotnet fiddle,它似乎适用于 .NET Core 3.1 和 Roslyn 3.4,但不适用于 .NET Framework 4.7.2,这更令人困惑。这里发生了什么?
  • .Net Core 3.1(通过)https://dotnetfiddle.net/Cc1hmk
  • Roslyn 3.4(通过)https://dotnetfiddle.net/megBiw
  • .NET Framework 4.7.2(编译错误)https://dotnetfiddle.net/6PPqDs
  • 最佳答案

    What is going on here?



    基本上,使用与现有局部变量同名的 lambda 表达式参数的能力是 C# 8 编译器中引入的一项新功能 - 但很少有人对此大惊小怪。我碰巧在本周的一次 session 上(从 Mads 本人那里)听说了这件事,否则我不会知道这件事。

    目标框架很重要,因为它 changes the default language version that the compiler applies .您可以使用 <LangVersion> 显式指定它元素虽然。例如,使用此项目文件:

    <Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net471</TargetFramework>
    <LangVersion>8.0</LangVersion>
    </PropertyGroup>
    </Project>

    ...代码构建良好。以 netstandard2.0 或 netcoreapp2.2 为目标时同上。

    关于c# - Lambda 参数名称(有时)与本地名称冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60559440/

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