定义:
//此赋值会创建其成员为 Item1 和 Item2 的元组,其使用方式与 Tuple 的相同。 var letters = ("a", "b"); //namedLetters 元组包含称为 Alpha 和 Beta 的字段。 (string Alpha, string Beta) namedLetters = ("a", "b"); //还可以指定赋值右侧的字段的名称 var alphabetStart = (Alpha: "a", Beta: "b"); //生成警告 CS8123,告知你赋值右侧的名称 Alpha 和 Beta 将被忽略, //因为它们与左侧的名称 First 和 Second 冲突。 (string First, string Second) firstLetters = (Alpha: "a", Beta: "b");
使用
元组在作为 private
和 internal
方法的返回类型时是最有用的。 元组为这些方法提供了简单的语法以返回多个离散值:不用再费心创作定义返回类型的 class
或 struct
。 无需创建新类型。
public static double StandardDeviation(IEnumerable<double> sequence) { (int Count, double Sum, double SumOfSquares) computation = ComputeSumsAnSumOfSquares(sequence); var variance = computation.SumOfSquares - computation.Sum * computation.Sum / computation.Count; return Math.Sqrt(variance / computation.Count); } private static (int Count, double Sum, double SumOfSquares) ComputeSumsAnSumOfSquares(IEnumerable<double> sequence) { var computation = (count: 0, sum: 0.0, sumOfSquares: 0.0); foreach (var item in sequence) { computation.count++; computation.sum += item; computation.sumOfSquares += item * item; } return computation; }
析构
//1 (int count, double sum, double sumOfSquares) = ComputeSumAndSumOfSquares(sequence); //2 var (sum, sumOfSquares, count) = ComputeSumAndSumOfSquares(sequence); //3 (double sum, var sumOfSquares, var count) = ComputeSumAndSumOfSquares(sequence); //4析构赋值 public class Point { public int X { get; set; } public int Y { get; set; } public Point(int x, int y) => (X, Y) = (x, y); }
析构用户定义类型
定义一个Deconstruct函数,参数加out
public class Point { public Point(double x, double y) { this.X = x; this.Y = y; } public double X { get; } public double Y { get; } public void Deconstruct(out double x, out double y) { x = this.X; y = this.Y; } } var p = new Point(3.14, 2.71); (double X, double Y) = p;
弃元
通常,在进行元组解构或使用 out
参数调用方法时,必须定义一个其值无关紧要且你不打算使用的变量。 为处理此情况,C# 增添了对弃元的支持。 弃元是一个名为 _
(下划线字符)的只写变量,可向单个变量赋予要放弃的所有值。 弃元类似于未赋值的变量;不可在代码中使用弃元(赋值语句除外)。
在以下方案中支持弃元:
using System; using System.Collections.Generic; public class Example { public static void Main() { var (_, _, _, pop1, _, pop2) = QueryCityDataForYears("New York City", 1960, 2010); Console.WriteLine($"Population change, 1960 to 2010: {pop2 - pop1:N0}"); } private static (string, double, int, int, int, int) QueryCityDataForYears(string name, int year1, int year2) { int population1 = 0, population2 = 0; double area = 0; if (name == "New York City") { area = 468.48; if (year1 == 1960) { population1 = 7781984; } if (year2 == 2010) { population2 = 8175133; } return (name, area, year1, population1, year2, population2); } return ("", 0, 0, 0, 0, 0); } } // The example displays the following output: // Population change, 1960 to 2010: 393,149
相关推荐
C# 7.0已经出来一段时间了,大家都知道新特性里面有个对元组的优化:ValueTuple。这里利用详尽的例子详解Tuple VS ValueTuple(元组类VS值元组),10分钟让你更了解ValueTuple的好处和用法。 如果您对Tuple足够了解...
C#7.0新增了诸多功能,其中有一项是新元组(ValueTuple),它允许我们可以返回多个值,并且配合解构能更加方便的进行工作,如下面例子 static void Main(string[] args) { (var name, var age) = GetUser(); ...
分享一下其实2016年12月就已经公布了的C#7.0的新特性吧,虽然很早就出来了,但咱这IDE不支持啊.. 不过在昨天的VS2017中已经完美可以支持使用了. E文好的,移步官方介绍地址:...
以下将是 C# 7.0 中所有计划的语言特性的描述。随着 Visual Studio “15” Preview 4 版本的发布,这些特性中的大部分将活跃起来。现在是时候来展示这些特性,你也告诉借此告诉我们你的想法! C#7.0 增加了许多新...
最近做的项目中用到了元组,这是C#7新添加的集合类型。目前C#7和.Net Core 2.0的书不多,那本清华翻译的红皮书内容简直惨不忍睹,自行翻译了《Pro C# 7, 8th Edition》的一部分内容,虽然翻译没有经过修饰很粗糙,但...
元组(Tuple)在4.0 的时候就有了,但元组也有些缺点,具体那些缺点,本文给大家介绍的非常详细,本文重点给大家C#语法新特征之元组,感兴趣的朋友一起学习吧
弃元(Discards) 是在 C# 7.0 的时候开始支持的,它是一种人为丢弃不使用的临时虚拟变量。语法上它是用来赋值的,但它却不被分配存储空间,即没有值,所以不能从中读取值。弃元用 _(下划线) 表示,下划线是一个...
对C#的全面支持: async , var和await不能用作标识符C#7.0(完整) 元组 舍弃 基本模式匹配 递归模式匹配 推荐当地人并返回 局部功能陈述 表达式身体构造函数 表情强壮的析构函数/终结器 投掷表达式 二进制和_...
元组和列表操作类似,但是元组属于不可变序列,元组创建后只可以元素覆盖不可以修改元素。元组的定义方式和列表相同,但定义时所有元素是放在一对圆括号“( )”中,用逗号“,”分隔元素值。 元组 实例:体会元组中的...
了解几个简单的构造函数,如何修改元组,访问元组,遍历元组,了解元组的内置函数,len(),计算元组个数,元组的最大、最小值,tuple()将列表转化成元组
如何访问元组,修改元组,遍历元组,元组的内置函数,例如,len(),max(),min(),tuple(),
基础篇11-python基本数据结构-元组和集合,元组和集合的基本用法
Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和...
Python实验12元组与字典.pdf
python学习笔记,包含python列表-可变和不可变类型-元组-列表与元组的速度比较
Python 将DataFrame数据转换成元组 Python源码Python 将DataFrame数据转换成元组 Python源码Python 将DataFrame数据转换成元组 Python源码Python 将DataFrame数据转换成元组 Python源码Python 将DataFrame数据转换成...
python容器:列表,元组,字典,集合的思维导图
Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和...