c# - 为什么在语法上无效的C#代码会编译?

标签 c# syntax-error

我是偶然发现的,但是显然我在一个更大的项目中编写了一些不正确的代码。我已经将其简化为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);
    }
}

h̸̰̏̐́͗e̸̖̥̞͆̓̋́ ̷̺̘͉̍̒̂̄ċ̴̟̻̣͚͑̂o̶̲͐̊̈́̉m̷̜̩̀̂͛e̴̳̅̏̌͝ṣ̵͇̏

https://dotnetfiddle.net/BwT1kx

最佳答案

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

由于某种原因,您的IDE使用了错误的C#版本来分析代码并给您错误的弯弯曲曲的线条。

关于c# - 为什么在语法上无效的C#代码会编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59383364/

相关文章:

javascript - Angular 2 : Uncaught SyntaxError: Unexpected token <

function - 调用 UDF 时公式中使用的值的数据类型错误

c# - 我想覆盖 C# 中的一个方法,但我有不同的签名

c# - 没有主键时如何防止使用SqlBulkCopy插入重复记录

c# - 建议 : MVC plugins/separate widgets architecture

python - 语法错误: bad input - Python

python-3.x - 在 Pandas 中使用drop方法时出现无效的语法错误

c# - 在 XP 上,如何使工具提示显示在半透明表单上方?

c# - Linq选择项目,它等于另一个表中的ID

syntax-error - ERR_CONTENT_DECODEDING_FAILED 是什么