各位观众,大家好,欢迎收看由火星电视台直播的《老周吹牛》节目,注意:本节目没有任何技术含量,如果您没有兴趣,请砸掉电视机。

今天说一下System命名空间下的一个数据类型——Tuple,翻译过来叫“元组”,其实翻译后我也不知道什么意思,很多专有名词翻译后都不知道什么意思。

尽管不知道是什么意思,不过,我知道怎么用。

Tuple比较类似于数组等集合类型,不同的是,Tuple允许每个元素的类型不同,并且是通过泛型参数来指定元素类型,而且必须严格按照顺序来赋值。比如,三元组包括三个元素,类型为int,string,double,那么,在创建Tuple实例并为各个元素分配值的时候,第一个参数必须为int类型的值,第二个参数的值必须是string类型的值,第三个参数的值必须为double类型的值。

Tuple不仅仅是强类型的集合,而且是有次序的,可谓是“等级森严”。

.NET高大上类库定义了N个Tuple类,可以包含的元素为1到7个。如下图所示。

你会不会觉得,这样的形式和Action委托很像?

确实差不多。如果Tuple是包含两个元素的元组,那么它会包含Item1和Item2两个属性,可以直接访问对应的元素。如果Tuple有四个元素,就会有Item1、Item2、Item3、Item4四个属性以供访问。

实则,Tuple用起来没什么技术难度,它的作用就是方便将几个数据组织在一起。比如在执行新线程时,通过可以传递给线程的参数只有一个,并且是object类型的。如果要传递的参数是多个值,以前的做法是定义一个自定义类去包装。但你不妨想想,为了传递一个参数而临时跑去定义一个新类,很费工夫。这时候可以用上Tuple类了。

Tuple实例化有两种方法,一种是找到适合的Tuple,比如 Tuple<T1, T2>,直接调用其构造函数实例化。

            Tuple<int, int> t = new Tuple<int, int>(300, 999);
Console.WriteLine($"Item1 = {t.Item1}, Item2 = {t.Item2}");

这个Tuple有两个元素,每个元素都是int类型,实例化时通过构造函数来赋值。然后可以用Item1和Item2属性分别获取元素的值。

还有一种方法是使用Tuple类的静态方法来创建合适的Tuple实例。

            Tuple<string, int, string> t2 = Tuple.Create<string, int, string>("小明", , "天边有朵云");
string msg = $"Item1 = {t2.Item1}, Item2 = {t2.Item2}, Item3 = {t2.Item3}";
Console.WriteLine(msg);

上面代码创建的Tuple有三个元素,第一个元素是字符串类型的值,第二个元素为整型,第三个元素为字符串。

如果希望一个方法返回多个值,也可用Tuple作为返回值:

        static Tuple<int, decimal, char> DoSomething()
{
return Tuple.Create<int, decimal, char>(, 60.0015m, 'x');
}

以上方法返回一组值,分别为int类型、decimal类型、char类型的值。

在多线程编程中还可以用Tuple来充当要传递的参数。

            Tuple<string, string> t3 = new Tuple<string, string>("desk", "table");
Task newtask = new Task(p =>
{
Tuple<string, string> ttmp = p as Tuple<string, string>;
// …… }, t3);
newtask.Start();

上面代码将带有两个string元素的Tuple对象传递给新的Task。

好,由于设制组资金短缺,本期节目到此结束。

【.NET深呼吸】元组数据(Tuple)的更多相关文章

  1. Python3 元组(tuple)

    一.定义:不可变序列的数据元素集合,元组的元素是不可以修改的 元组使用小括号,例如:tuple = (1,) 注意:即使元组里面只有一个元素,该元素后面也要加 ",":在函数传递参 ...

  2. Python基础数据类型-列表(list)和元组(tuple)和集合(set)

    Python基础数据类型-列表(list)和元组(tuple)和集合(set) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客使用的是Python3.6版本,以及以后分享的 ...

  3. Python中的数据结构 --- 元组(tuple)、字典(tuple)

       元组(tuple)本身是不可变数据类型,没有增删改查:元组内可以存储任意数据类型一.元组的创建 例:t = (1,2.3,'star',[1,2,3])      ## 元组里面包含可变类型,故 ...

  4. Python 序列、列表(List)、元组(Tuple)

    序列 序列是Python中最基本的数据结构,包括字符串.列表.元组. 序列,顾名思义,是有序的,序列都有索引,都能进行索引.切片(截取).加(连接).乘(倍增).检查成员的操作. 因为序列有序,可通过 ...

  5. 27.Python列表(list)、元组(tuple)、字典(dict)和集合(set)详解

    本章将会介绍 Python 内置的四种常用数据结构:列表(list).元组(tuple).字典(dict)以及集合(set). 这四种数据结构一但都可用于保存多个数据项,这对于编程而言是非常重要的,因 ...

  6. C#中的元组对象Tuple

    原文:C#中的元组对象Tuple 一.什么是元组 元组就是一些对象的集合,在我们编程时,比如一个人的信息,我们常常创建一个Person类去描述一个人,传统的做法如下: public class Per ...

  7. 元组(tuple)的用途(基础)

    >>>a = 123,456,'jia',['jia','xiang'] >>>a (123, 456, 'jia', ['jia', 'xiang']) 这个带括 ...

  8. 元组(Tuple)

    元组(Tuple) 笛卡尔积中每一个元素(d1,d2,…,dn)叫作一个n元组(n-tuple)或简称元组. 元组是关系数据库中的基本概念,关系是一张表,表中的每行(即数据库中的每条记录)就是一个元组 ...

  9. Scala基础:数组(Array)、映射(Map)、元组(Tuple)、集合(List)

    数组 package com.zy.scala object ArrayDemo { def main(args: Array[String]): Unit = { //定长数组 val arr1 = ...

  10. python基础数据类型--元组(tuple)

    python基础数据类型--元组(tuple) 一.元组的定义和特性 定义:与列表相似,只不过就是将[ ] 改成 ( ) 特性:1.可以存放多个值 2.不可变 3.按照从左到右的顺序定义元组元素,下标 ...

随机推荐

  1. dll文件32位64位检测工具以及Windows文件夹SysWow64的坑

    自从操作系统升级到64位以后,就要不断的需要面对32位.64位的问题.相信有很多人并不是很清楚32位程序与64位程序的区别,以及Program Files (x86),Program Files的区别 ...

  2. [.NET] 利用 async & await 的异步编程

    利用 async & await 的异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/5922573.html  目录 异步编程的简介 异 ...

  3. 卸载oracle之后,如何清除注册表

    之前卸载了oracle,今天偶然间发现,在服务和应用程序里面,还残存着之前的oracle服务.原来,还需要去清理下注册表. 在开始菜单的这个框里面 输入regedit,进入注册表.找到这个目录 HKE ...

  4. if __name__== "__main__" 的意思(作用)python代码复用

    if __name__== "__main__" 的意思(作用)python代码复用 转自:大步's Blog  http://www.dabu.info/if-__-name__ ...

  5. PHP设计模式(二)工厂方法模式(Factory Method For PHP)

    简单工厂简述: 简单工厂模式实现了生产产品类的代码跟客户端代码分离,在工厂类中你可以添加需要生成长跑的逻辑代码(new 产品类),但是问题来了,优秀的代码是符合"开闭原则"如果你要 ...

  6. atitit.管理学三大定律:彼得原理、墨菲定律、帕金森定律

    atitit.管理学三大定律:彼得原理.墨菲定律.帕金森定律 彼得原理(The Peter Principle) 1 彼得原理解决方案1 帕金森定律 2 如何理解墨菲定律2 彼得原理(The Pete ...

  7. MySQL常用命令

    数据库登陆命令: mysql -uroot -p 2.提示输入密码: 3.登陆成功: 4.数据库修改相关命令: 修改数据库的编码格式: 语法格式为:ALTER {DATABASE|SCHEMA}  [ ...

  8. CentOS:设置系统级代理(转)

    原文地址:http://www.cnblogs.com/cocowool/archive/2012/07/05/2578487.html YUM代理设置 编辑/etc/yum.conf,在最后加入 # ...

  9. emmet,jade,haml, slim,less,sass,coffeescript等的实战优缺点

    摘要: 文章背景,来自于群内周五晚上的一次头脑风暴式的思维碰撞交流活动. 随着前端技术的蓬勃发展, 各种新技术随着生产力的需要不断的涌入我们的视野, 那今天探讨的话题是这些新时代的前端兵器谱: 一. ...

  10. Java泛型的历史

    为什么Java泛型会有当前的缺陷? 之前的章节里已经说明了Java泛型擦除会导致的问题,C++和C#的泛型都是在运行时存在的,难道Java天然不支持“真正的泛型”吗? 事实上,在Java1.5在200 ...