Gha*_*san 5 c# compiler-errors
有两个项目,一个是面向 .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);
}
Run Code Online (Sandbox Code Playgroud)
我从这个问题中了解到,简单的名称不应具有不同的含义,因此,即使 .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
这里发生了什么?
基本上,使用与现有局部变量同名的 lambda 表达式参数的能力是 C# 8 编译器中引入的一项新功能 - 但很少有人对此大惊小怪。我碰巧在本周的一次会议上(从 Mads 本人那里)听说了这件事,否则我不会知道这件事。
目标框架很重要,因为它更改了编译器应用的默认语言版本。不过,您可以使用<LangVersion>元素显式指定它。例如,使用此项目文件:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net471</TargetFramework>
<LangVersion>8.0</LangVersion>
</PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
...代码构建良好。以 netstandard2.0 或 netcoreapp2.2 为目标时同上。
| 归档时间: |
|
| 查看次数: |
150 次 |
| 最近记录: |