首页 > 解决方案 > 为什么这个语法上无效的 C# 代码会编译?

问题描述

我很偶然地发现了这一点,但我显然在一个更大的项目中编写了一些不正确的代码。我已将其简化为 MVCE,并且很好奇它为什么会编译。在 C# 中进行类型检查后,我不小心添加了系统似乎将其视为变量名的内容,并且它似乎被视为我正在类型检查的变量的别名。您可以在下面的 dotnetfiddle 中进行测试。

有人对这里到底发生了什么有解释吗?

作为参考,我正在使用带有 .net 4.6.1 项目的 vs2017 企业版。

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

标签: c#syntax-error

解决方案


不是错误,而是功能!这是自 C# 7.0 以来is关键字支持的模式匹配

出于某种原因,您的 IDE 使用错误的 C# 版本来分析代码并给您错误的波浪线。


推荐阅读