C# 7.0 向 C# 语言添加了许多新功能
01 out 变量 支持out
参数的现有语法已在此版本中得到改进。 现在可以在方法调用的参数列表中声明 out
变量,而不是编写单独的声明语句: if (int.TryParse(input,out int result)) Console.Writeline(result);else Console.Writeline("Could not parse input");为清晰明了,可能需指定
out
变量的类型,如上所示。 但是,该语言支持使用隐式类型的局部变量: if (int.TryParse(input,out var answer)) Console.Writeline(answer);else Console.Writeline("Could not parse input");代码更易于阅读。 在使用 out 变量的地方声明 out 变量,而不是在上面的另一行。 无需分配初始值。 @H_301_117@通过在方法调用中使用
out
变量的位置声明该变量,使得在分配它之前不可能意外使用它。 02 元组 C# 为用于说明设计意图的类和结构提供了丰富的语法。 但是,这种丰富的语法有时会需要额外的工作,但益处却很少。 你可能经常编写需要包含多个数据元素的简单结构的方法。为了支持这些方案,已将元组 添加到了 C#。 元组是包含多个字段以表示数据成员的轻量级数据结构。 这些字段没有经过验证,并且你无法定义自己的方法 可以通过为每个成员赋值来创建元组,并可选择为元组的每个成员提供语义名称:低于 C# 7.0 的版本中也提供元组,但它们效率低下且不具有语言支持。 这意味着元组元素只能作为 Item1 和 Item2 等引用。 C# 7.0 引入了对元组的语言支持,可利用更有效的新元组类型向元组字段赋予语义名称。
(string Alpha,string Beta) namedLetters = ("a","b");Console.Writeline($"{namedLetters.Alpha},{namedLetters.Beta}");
namedLetters
元组包含称为 Alpha
和 Beta
的字段。 这些名称仅存在于编译时且不保留,例如在运行时使用反射来检查元组时。
在进行元组赋值时,还可以指定赋值右侧的字段的名称:
var AlphabetStart = (Alpha: "a",Beta: "b");Console.Writeline($"{AlphabetStart.Alpha},{AlphabetStart.Beta}");
在某些时候,你可能想要解包从方法返回的元组的成员。 可通过为元组中的每个值声明单独的变量来实现此目的。 这种解包 *** 作称为解构元组 :
(int max,int min) = Range(numbers);Console.Writeline(max);Console.Writeline(min);
还可以为 .NET 中的任何类型提供类似的析构。 编写 Deconstruct
方法,用作类的成员。Deconstruct
方法为你要提取的每个属性提供一组 out
参数。 考虑提供析构函数方法的此 Point
类,该方法提取 X
和 Y
坐标:
public class Point { public double X { get; } public double Y { get; } public Point(double x,double y) => (X,Y) = (x,y); public voID Deconstruct(out double x,out double y) => (x,y) = (X,Y); }
可以通过向元组分配 Point
来提取各个字段:
var p = new Point(3.14,2.71);
(double X,double Y) = p;
可在元组相关文章中深入了解有关元组的详细信息。
03 弃元通常,在进行元组解构或使用 out
参数调用方法时,必须定义一个其值无关紧要且你不打算使用的变量。 为处理此情况,C# 增添了对弃元的支持 。 弃元是一个名为 _
(下划线字符)的只写变量,可向单个变量赋予要放弃的所有值。 弃元类似于未赋值的变量;不可在代码中使用弃元(赋值语句除外)。
在以下方案中支持弃元:
在对元组或用户定义的类型进行解构时。 在使用 out 参数调用方法时。 在使用 is 和 switch 语句匹配 *** 作的模式中。 在要将某赋值的值显式标识为弃元时用作独立标识符。以下示例定义了 queryCityDataForYears
方法,它返回一个包含两个不同年份的城市数据的六元组。 本例中,方法调用仅与此方法返回的两个人口值相关,因此在进行元组解构时,将元组中的其余值视为弃元。
1 using System; 2 using System.Collections.Generic; 3 4 public class Example 5 { 6 public static voID Main() 7 { 8 var (_,_,pop1,pop2) = queryCityDataForYears("New York City",1960,2010); 9 10 Console.Writeline($"Population change,1960 to 2010: {pop2 - pop1:N0}");11 }12 13 private static (string,double,int,int) queryCityDataForYears(string name,int year1,int year2)14 {15 int population1 = 0,population2 = 0;16 double area = 0;17 18 if (name == "New York City") {19 area = 468.48; 20 if (year1 == 1960) {21 population1 = 7781984;22 }23 if (year2 == 2010) {24 population2 = 8175133;25 }26 return (name,area,year1,population1,year2,population2);27 }28 29 return ("",0,0);30 }31 }32 // 输出结果:33 // Population change,1960 to 2010: 393,149
有关详细信息,请参阅弃元。
04 模式匹配 05 Ref 局部变量和返回结果 06 本地函数 07 更多的 Expression-bodIEd 成员 08 引发表达式 09 通用的异步返回类型 10 数字文本语法改进 连载目录 【已更新最新开发文章,点击查看详细】 总结以上是内存溢出为你收集整理的C#7.0 新增功能全部内容,希望文章能够帮你解决C#7.0 新增功能所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)