我是偶然发现的,但是显然我在一个更大的项目中编写了一些不正确的代码。我已经将其简化为MVCE,并且很好奇为什么甚至可以编译。我无意中添加了在C#中进行类型检查后系统似乎将其视为变量名称的内容,并且它似乎将其视为我进行类型检查的变量的别名。您可以在下面的dotnetfiddle中进行测试。
有人对这里发生的事情有任何解释吗?
供引用,我将vs2017企业版与.net 4.6.1项目一起使用。
using System;
public class Program
{
public static void Main()
{
string foo = "hello world";
if (!(foo is string str)) { return; }
Console.WriteLine(str);
}
}
https://dotnetfiddle.net/BwT1kx
最佳答案
不是错误,而是功能!这就是is
关键字since C# 7.0支持的模式匹配
由于某种原因,您的IDE使用了错误的C#版本来分析代码并给您错误的弯弯曲曲的线条。
关于c# - 为什么在语法上无效的C#代码会编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59383364/