Build 2018大会:C#的未来

\u0026#xD;

看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料!

\u0026#xD;
\u0026#xD;\u0026#xD;

在C#的未来特性清单上,排在第一位的是可空引用类型。我们第一次报道这个特性是在去年,这里我们简要的回顾一下:所有的引用变量、参数和字段默认都是非空的。然后,和值类型一样,如果你希望它们可以为空,你就必须在类型名上加一个问号(?)来显式说明。

\u0026#xD;\u0026#xD;

这会是一项可选特性,目前的想法是,对于将升级到C# 8的现有项目,可空引用类型特性是关闭的。对于新项目,微软倾向于默认开启这项特性。

\u0026#xD;\u0026#xD;

警告会进一步分成潜在错误和表面警告。例如,如果p.MiddleName是一个string?,那么下面这行代码会是一个表面警告:

\u0026#xD;\u0026#xD;
string middleName = p.MiddleName;\u0026#xD;
\u0026#xD;\u0026#xD;

由于危险只会出现在值解引用的时候,所以这种对局部变量的赋值并不是一个真正的问题。因此,你可以在遗留代码上禁用这个警告,以减少误报数量。

\u0026#xD;\u0026#xD;

同样,早于这项特性的库也不会触发警告,因为编译器不知道一个指定的参数是否应该视为可空的。

\u0026#xD;\u0026#xD;

GitHub上提供了可空引用类型的预览

\u0026#xD;\u0026#xD;

Switch表达式

\u0026#xD;\u0026#xD;

Switch块通常用于简单地返回单个值。在这个常见的场景中,其语法比实际完成的工作要复杂得多。考虑下下面这个使用模式匹配的例子:

\u0026#xD;\u0026#xD;
static string M(Person person)\u0026#xD;{\u0026#xD;    switch (person)\u0026#xD;    {\u0026#xD;        case Professor p:\u0026#xD;            return $\"Dr. {p.LastName}\";\u0026#xD;            case Studen s:\u0026#xD;                return $\"{s.FirstName} {s.LastName} ({s.Level})\";\u0026#xD;        default:\u0026#xD;            return $\"{person.FirstName} {person.LastName}\";\u0026#xD;    }\u0026#xD;}\u0026#xD;
\u0026#xD;\u0026#xD;

在新的提案中,反复出现的case和return语句可以省掉,其结果是下面这种更新、更紧凑的语法:

\u0026#xD;\u0026#xD;
static string M(Person person)\u0026#xD;{\u0026#xD;    return person switch\u0026#xD;    {\u0026#xD;        Professor p =\u0026gt; $\"Dr. {p.LastName}\
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2名名名名名名名名名名名名名名名名名名名

谢谢啊011702

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值