千家信息网

C#7.1有哪些特性

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要讲解了"C#7.1有哪些特性",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"C#7.1有哪些特性"吧!自2003年以来,Microsoft首
千家信息网最后更新 2026年11月01日C#7.1有哪些特性

这篇文章主要讲解了"C#7.1有哪些特性",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"C#7.1有哪些特性"吧!

自2003年以来,Microsoft首次考虑对C#使用带小数点后位数的版本。当前暂定下一个版本是C# 7.1,其中有望包括:异步Main函数(Async Main)、默认表达式(Default Expression)、推导元组名(Infer Tuple Names)和使用泛型的模式匹配(Pattern-matching with Generics)等。

异步Main函数

最让测试异步代码的开发人员沮丧的,无疑是控制台应用当前不支持异步入口点(EntryPoint)。虽然变通方法是编写多行样板代码,但是这样的模式依赖于对方法的非正常使用,难于理解。例如:

ublic static void Main(){    MainAsync().GetAwaiter().GetResult();}private static async Task MainAsync(){    ... // 程序主代码。}

为解决这个问题,在"异步Main函数建议"中,添加了如下四个新的函数签名,罗列了可能的入口点。

static Task Main()static TaskMain()static Task Main(string[])static TaskMain(string[])

如果代码中不存在另一个非异步Main函数,那么只要给出一个上述的入口点函数,编译器就会生成所需的样板代码。唯一的限制是需要向后兼容。

Microsoft曾考虑允许"async void Main()",但是这种做法会使编译器更复杂,并且Microsoft总体上并不鼓励在事件处理器之外使用"async void"。

默认值(即Nothing)

VB没有表示"null"的关键字,这是C#和VB间的一个微妙的差别。但是VB有一个关键字"Nothing"。在语言技术规范中,对该关键字给出了如下说明:

Nothing是一个特殊的常值。它没有类型,可转换为类型系统中的任意类型,也包括类型参数。在转换为某个特定类型后,它等价于该类型的默认值。

C#当前使用"default(T)"模式实现同一效果,但略为繁琐,尤其是类的名字很长时。C# 7.1中将提供一个"默认常值"(Default Literal),其描述为:

这一类型的表达式可通过常值转换为默认值或null值,隐式地转换为any类型。

该类型向默认常值的推理与向null常值推理的工作机制一样,除非允许any类型(不只是引用类型)。

在可以使用null的地方,通常也可以使用默认常值。这一做法被看成是C#建议中的一个倒退,可能因为人们通常会对两个非常类似的方法完成同一件事大皱眉头。在设计会议纪要中,就有人提出疑问:

我们是否正在挑起类型之争?

一个使用默认常值的例子如下:

ImmutableArrayx = default;return default;void Method(ImmutableArrayarrayOpt = default)var x = new[] { default, ImmutableArray.Create(y) };const int x = default;if (x == default)if (x is default)y = default as RefType //编译器告警:总是null。int i = default

下面例子给出的是对默认常值的非法使用:

const int? y = default;if (default == default)if (default is T)var i = defaultthrow default

后者无疑是一个C#设计上的奇特构件。在设计会议纪要中,给出了如下说法:

在C#中,允许开发人员抛出null。这会引发一个运行时错误,进而导致抛出一个NullReferenceException异常。因此,抛出NullReferenceException并非正大光明的,而是一种丑陋的模式。

完全没有理由允许抛出默认值。我们并不认为用户会感觉这是可行的,或是了解它的工作机制。

Microsoft并未引入默认常值,而是考虑通过扩展"null"实现同一效果。因为在VB中"nothing"和"null"是两个不同的关键词,所以在VB中可以这样做。即使不使用关键字,VB中也具有null的概念。因此,开发人员可以看到"NothingReferenceException"这样的异常。

感谢各位的阅读,以上就是"C#7.1有哪些特性"的内容了,经过本文的学习后,相信大家对C#7.1有哪些特性这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

类型 C# 函数 代码 关键 特性 关键字 模式 人员 入口 方法 编译器 学习 开发 编译 设计 两个 会议 会议纪要 例子 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 关于新基建和互联网科技 互联网金融和金融科技 卓越科技互联网 招聘 哈尔滨秒房互联网科技有限公司 安控科技rtu产品工业互联网 卫星互联网科技股票 互联网和高科技公司 常德市电业局互联网科技部 互联网科技创新服务 想开互联网科技公司怎么样 民营互联网公司国防科技 广州千川互联网科技有限公司 有人说阿里系是互联网科技企业 互联网硬科技公司 抖集互联网科技技术咨询 张家口科技产业互联网平台 唐山双旺合互联网科技产业园 杭州科技互联网公司有哪些 重庆科技产业互联网有哪些 宁波允成互联网科技有限公司 中智农互联网科技 苏州大垚互联网科技 广州紫鲸互联网科技 齐家互联网科技有限公司 互联网科技股午盘股票涨跌 厦门千工互联网科技有限公司 晋城互联网科技 互联网科技包装股份有限公司上市 广西科技产业互联网是什么 长沙渺峰互联网科技有限公司
0