ug环球会员充值:C# 9.0 新特征之目的类型推导 new 表达式

时间:4个月前   阅读:36

阅读本文也许需要 2 分钟。

呼~~,每次过完一个周末,写作就失去了动力,一两天才气缓过来。尽管如此,照样要坚持写好每一篇文章的。宁缺毋滥嘛,宁愿发文的频率低一点,也要保证文章的质量,至少排版不能差,行文要流通,错别字不能有。

关于类型推导想必人人都很熟悉,它是在 var 关键字引入的时刻引入 C# 的。

var i = 10;
var u = new User();

编译器会通过右边的字面量自动推导左边变量的类型,这种推导方式可以归纳为:从上下文右边推导出左边的类型。我们不妨把它称为源类型推导(Source-typed inferring,参考 Target-typed 自创的术语)。

响应的,有源类型推导就有目的类型推导 (Target-typed inferring),它是指从上下文左边推导出右边的类型。好比数组的初始化和 Lambda 表达式常常是目的类型推导的表达式。举个例子:

// 没有使用类型推导
string[] s = new string[] { "a", "b" };
// 目的类型推导(左推右)
string[] s = new { "a", "b" };
string[] s = new [] { "a", "b" };

// 没有使用类型推导
Users.FirstOrDefault<User>(u => u.id = 123);
// 目的类型推导(左推右)
Users.FirstOrDefault(u => u.id = 123);

这次在 C# 9 中,增加了用户界说类型 new 表达式的目的类型推导,即通过上下文左边自动推导 new 表达式的类型,从而在使用 new 组织时省略类型的指定,请看示例:

// C# 9 之前
Point p = new Point(3, 5);

// C# 9
Point p = new (3, 5);

除此之外,C# 9 也增加了操作符 ???: 的目的类型推导支持。之前这两个操作符必须要求双方的操作工具都是相同的类型,否则会编译报错。而在 C# 9 中,只要目的类型是操作工具配合的基类就不再见编译报错了,好比:

// Student 和 Customer 拥有配合的父类 Person
Person person = (Person)(student ?? customer); // C# 9 之前
Person person = student ?? customer; // C# 9

// 可空类型,0 和 null 都可以隐式转换为 int? 类型
int? result = b ? 0 : (int?)null; // C# 9 之前
int? result = b ? 0 : null; // C# 9

实在本文的焦点就一句代码:

Point p = new (3, 5);

却一不小心烦琐了这么一堆。但讲真,学习新的知识不是要死记硬背,而要学会归类推理,闻一知十,经常思索,最好能形成自己的一种思维习惯,这样学习才会酿成一件水到渠成的事。多看我的文章,希望你能学到的不仅仅是生硬的编程知识点,也希望我的行文气概和思维习惯对你有所启发。

,

欧博手机版下载

欢迎进入欧博手机版下载(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。

上一篇:欧博注册:《国际产业》南韩建立3000亿韩元基金 资助汽车分包商

下一篇:ug环球官方注册:【疫后新形势 工薪族怎么办】留乡生长今胜昔 农民工:我不想再漂流