Tuple 字面意思:元组。是.net4.0增加的新特性,是干什么的呢?总结一句,个人觉得这个东西 就是用来在有返回很多种类型的值时可以用到。它提供了8种类型的Tuple,直接看最复杂的那种(其实不是复杂,就是参数比别人多而已,原理是完全一致的),原理不讲太多,看下这个类的结构就知道什么原理了。

[Serializable, __DynamicallyInvokable]
public class Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple
{
// Fields
private readonly T1 m_Item1;
private readonly T2 m_Item2;
private readonly T3 m_Item3;
private readonly T4 m_Item4;
private readonly T5 m_Item5;
private readonly T6 m_Item6;
private readonly T7 m_Item7;
private readonly TRest m_Rest; // Methodspublic Tuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, TRest rest);
public override bool Equals(object obj);
public override int GetHashCode();
int IStructuralComparable.CompareTo(object other, IComparer comparer);
bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer);
int IStructuralEquatable.GetHashCode(IEqualityComparer comparer);
int IComparable.CompareTo(object obj);
int ITuple.GetHashCode(IEqualityComparer comparer);
string ITuple.ToString(StringBuilder sb);
public override string ToString(); // Properties
[__DynamicallyInvokable]
public T1 Item1 { [__DynamicallyInvokable, TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")] get; }
此处省略:T2到T6的定义,因为完全一致,为了减少文章篇幅。
[__DynamicallyInvokable]
public T7 Item7 { [__DynamicallyInvokable, TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")] get; }
[__DynamicallyInvokable]
public TRest Rest { [__DynamicallyInvokable, TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")] get; }//注意这个最后一个参数的类型,其实它是Tupple类型的
int ITuple.Size { get; }
}
Tuple<int, string, bool, char, ClassStyle, Dictionary<int,string>, IEnumerable<int> , TRest> tuple=new
Tuple(1,"string",true,'1',new Student(),.....,Tuple<任意类型>);
用法就是在函数返回的时候,可以new一个这样的类型的对象,对其各个属性赋值,这样就可以返回非常多类型的数据,取得返回的值,就是用这个tuple对象.Item1,就可以获得相应类型的值,比如在这里我们tuple.Item1的值是1,tuple.Item2的值是“string”,以此类推。当然这些Item是只读的,不能对其进行赋值操作。为我们提供了很大的方便。以上是创建Tuple的方法之一,接下来说下另一个方法,先看下这个Tuple静态类:
[__DynamicallyInvokable]
public static class Tuple
{
// Methods
internal static int CombineHashCodes(int h1, int h2);internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6, int h7, int h8);
[__DynamicallyInvokable]
public static Tuple<T1> Create<T1>(T1 item1);
此处省略:T2到T6的定义,因为完全一致,为了减少文章篇幅。
[__DynamicallyInvokable]

public static Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8>> Create<T1, T2, T3, T4, T5, T6, T7, T8>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, T8 item8); }

其实代码更多,当然区别也是参数个数不一致,原理还是一样的,这里只写出两个。

看一眼就知道Create<....>这个方法,没错我们也可以通过Tuple这个静态类中的Create静态方法来创建不定个数参数的Tuple对象,举个例子:

var trest = Tuple.Create<int>();
var t8 = Tuple.Create<int, int, int, int, int, int, int, Tuple<int>>(, , , , , , , trest);

第八个参数 一定是要Tuple类型的,当然只有这个需要8个参数的Tuple类型最后一个参数需要Tuple类型,而其他几个(这里指1~7个参数的Tuppe)都是任意类型都可以。可能是为了用于扩展更多的参数,因为Tuple毕竟只是提供了最多8种不同参数的构造方法。其实这个东西就是为了方便我们可以返回多个不同类型的值。

												

.Net 4.0特性 Tuple元组的更多相关文章

  1. .NET Framework 4.0之Tuple(元组)

    Tuple,是函数式编程的概念之一,早见于Elang.F#等动态语言.Tuple类型像一个口袋,在出门前可以把所需的任何东西一股脑地放在里面.您可以将钥匙.驾驶证.便笺簿和钢笔放在口袋里,您的口袋是存 ...

  2. Python list 列表和tuple元组

    1 list是一种Python的数据类型--列表 list是一种有序的集合,可以进行增删改查 >>>name=[aa,bb,cc] >>>name ['aa','b ...

  3. Tuple元组 、 ValueTuple 值元组详解

    Tuple元组 Tuple是C# 4.0时出的新特性,.Net Framework 4.0以上版本可用. 元组是一种数据结构,具有特定数量和元素序列,与数组不同,元祖中的元素可以不同的数据类型.比如设 ...

  4. Python - 基础数据类型 tuple 元组

    元组简单介绍 元组是一个和列表和相似的数据类型,也是一个有序序列 两者拥有着基本相同的特性,但是也有很多不同的地方 声明元组 var = (1, 2, 3) var = ("1", ...

  5. tuple元组(C++11及以后,如C++14)

    类tuple与array最本质的区别当数tuple元组元素类型可以不一样,而统一数组array的元素类型必须一样. 本文主要举例: tuple_size Example 123456789101112 ...

  6. python list(列表)和tuple(元组)

    200 ? "200px" : this.width)!important;} --> 介绍 python中存在两种有序的类型列表,分别是list(列表)和tuple(元组) ...

  7. Tuple元组

    Tuple元组 Tuple 是 Storm 的主要数据结构,并且是 Storm 中使用的最基本单元.数据模型和元组. Tuple 描述 Tuple 就是一个值列表, Tuple 中的值可以是任何类型的 ...

  8. .Net Core 2.0生态(3):ASP.NET Core 2.0 特性介绍和使用指南

    ASP.NET Core 2.0 发布日期:2017年8月14日 ASP.NET团队宣布ASP.NET Core 2.0正式发布,发布Visual Studio 2017 15.3支持ASP.NET ...

  9. Python数据类型的内置函数之tuple(元组),dict(字典),set(集合)

    Python数据类型内置函数 - str(字符串) - list(列表) - tuple(元组) - dict(字典) - set(收集) tuple(元组)的操作 - (count)统计元组中元素出 ...

随机推荐

  1. 【第一篇:C++与opencv】图片的读取和显示

    这里介绍C++版本的opencv,和C语言版本有些不同,先看代码^_^ [编译环境:opencv2.4.4和VS2008] #include "stdafx.h" #include ...

  2. [置顶] 使用红孩儿工具箱完成基于Cocos2d-x的简单游戏动画界面

    [Cocos2d-x相关教程来源于红孩儿的游戏编程之路CSDN博客地址:http://blog.csdn.net/honghaier 红孩儿Cocos2d-X学习园地QQ3群:205100149,47 ...

  3. IOS的处理touch事件处理(按照手指的移动移动一个圆,开发环境用的ios7,storyboard)

    先看下页面的效果图: 首先定义这个ball它有两个属性和两个方法: @property(nonatomic) CGPoint location; @property(nonatomic) CGFloa ...

  4. XML(三)

     使用 XSLT 显示 XML -------------------------------------------------------------------------------- 通 ...

  5. ACM比赛(进制转换)

    Time Limit:1000MS     Memory Limit:131072KB     64bit IO Format:%lld & %llu Description 把十进制整数转换 ...

  6. word2013 无endnote选项卡咋办

    word2013 无endnote选项卡咋办? 前提: 已经安装了endnotex7,office word2013 word->文件->选项->加载项->最下面的 管理 &q ...

  7. C# 课堂总结2-数据类型及转换方式

    一.输入输出语句 Console.ReadLine(); 会等待直到用户按下回车,一次读入一行Console.ReadKey(); 则是等待用户按下任意键,一次读入一个字符. 二.数据类型 主要掌握: ...

  8. BZOJ 1877: [SDOI2009]晨跑( 最小费用最大流 )

    裸的费用流...拆点, 流量限制为1, 最后的流量和费用即答案. ------------------------------------------------------------------- ...

  9. Python 第七篇:socket编程

    一:socket基础: 1.1:Socket基础: socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用[打开][读写][关闭]模式来操作.socket就是该模 ...

  10. JavaScript DOM省市自适配select菜单

    <html> <head> <meta charset="UTF-8"> <meta name="Generator" ...