c# - 为什么这个语法上无效的 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);
}
}
解决方案
不是错误,而是功能!这是自 C# 7.0 以来is
关键字支持的模式匹配
出于某种原因,您的 IDE 使用错误的 C# 版本来分析代码并给您错误的波浪线。
推荐阅读
- java - 如何在子类中正确调用超类的构造函数?
- python - NLTK Tokenizer 的算法复杂度
- statsmodels - 使用 statsmodels.formula.api 中的 ols 只有一个常数项?
- r - 在 r 中使用 ggplot 向 usmap 添加点
- json - 将 Hubspot Analytics API 中的 JSON 写入谷歌电子表格 - 使用谷歌应用脚本
- bash - .bash_profile 不在 su 用户上运行
- c# - Task.Whenall(列表
) 输出 OutOfRangeException - javascript - dangerouslySetInnerHtml 仍然没有渲染脚本
- android - 如何使用 XML 中的 Recycler 视图正确地将代码添加到 Fragment?
- ionic3 - ngx-mqtt TypeError: __WEBPACK_IMPORTED_MODULE_0__angular_core__.defineInjectable 不是函数