.Net 4.0特性 Tuple元组
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元组的更多相关文章
- .NET Framework 4.0之Tuple(元组)
Tuple,是函数式编程的概念之一,早见于Elang.F#等动态语言.Tuple类型像一个口袋,在出门前可以把所需的任何东西一股脑地放在里面.您可以将钥匙.驾驶证.便笺簿和钢笔放在口袋里,您的口袋是存 ...
- Python list 列表和tuple元组
1 list是一种Python的数据类型--列表 list是一种有序的集合,可以进行增删改查 >>>name=[aa,bb,cc] >>>name ['aa','b ...
- Tuple元组 、 ValueTuple 值元组详解
Tuple元组 Tuple是C# 4.0时出的新特性,.Net Framework 4.0以上版本可用. 元组是一种数据结构,具有特定数量和元素序列,与数组不同,元祖中的元素可以不同的数据类型.比如设 ...
- Python - 基础数据类型 tuple 元组
元组简单介绍 元组是一个和列表和相似的数据类型,也是一个有序序列 两者拥有着基本相同的特性,但是也有很多不同的地方 声明元组 var = (1, 2, 3) var = ("1", ...
- tuple元组(C++11及以后,如C++14)
类tuple与array最本质的区别当数tuple元组元素类型可以不一样,而统一数组array的元素类型必须一样. 本文主要举例: tuple_size Example 123456789101112 ...
- python list(列表)和tuple(元组)
200 ? "200px" : this.width)!important;} --> 介绍 python中存在两种有序的类型列表,分别是list(列表)和tuple(元组) ...
- Tuple元组
Tuple元组 Tuple 是 Storm 的主要数据结构,并且是 Storm 中使用的最基本单元.数据模型和元组. Tuple 描述 Tuple 就是一个值列表, Tuple 中的值可以是任何类型的 ...
- .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 ...
- Python数据类型的内置函数之tuple(元组),dict(字典),set(集合)
Python数据类型内置函数 - str(字符串) - list(列表) - tuple(元组) - dict(字典) - set(收集) tuple(元组)的操作 - (count)统计元组中元素出 ...
随机推荐
- BZOJ 3155: Preprefix sum( 线段树 )
刷刷水题... 前缀和的前缀和...显然树状数组可以写...然而我不会, 只能写线段树了 把改变成加, 然后线段树维护前缀和, 某点p加, 会影响前缀和pre(x)(p≤x≤n), 对[p, n]这段 ...
- 树莓派变成一个Web服务器: nginx + php + sqlite
将树莓派变成一个Web服务器,通过访问网页,就可以控制树莓派,比如:查看摄像头\开灯等等. 一想到Linux Web服务器,我们首先想到的是,Apache + MySql + Php. 树莓派可以安装 ...
- Chapter 10 模版方法模式
我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模版模式来处理. 模版方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模 ...
- 基于visual Studio2013解决算法导论之043单源最短路径dijstra矩阵
题目 单源最短路径dijstra矩阵 解决代码及点评 // 26单源最短路径dijstra矩阵.cpp : 定义控制台应用程序的入口点. // #include <iostream> ...
- java的new BufferedReader(new InputStreamReader(System.in))
流 JAVA /IO 基本小结 通过一行常见的代码讨论:new BufferedReader(new InputStreamReader(System.in)) /*** *** 看到这篇文章挺好的, ...
- 疯牛-- Aggressive cows (二分)
疯牛 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小 ...
- leetcode第一刷_Maximal Rectangle
这个题比刚才那个更难. 假设没做过上一个,这个简直是无情. 先想一个笨笨的解法,如何确定一个矩形呢?找一个左上角,然后每行的看能延伸到什么位置.注意随着行数的添加,列数是仅仅能变短,不能变长. 想一下 ...
- 我对国内两大购书站点的感受(dearbook和china-pub)
我在china-pub和dearbook都是老用户了(china-pub五星,dearbook钻石VIP).说一下近来我对两个站点的感觉. 1. Dearbook和当当合作以后送货速度比china-p ...
- [置顶] c# datagridview‘s learn
c# 一串数字“1122331111155”,要输出到DataGridview控件上,但是要逐个数字读取,如果上一个数字与下一个相同,则排成一列,不相同,则另外排成一列.如“11223311111 ...
- 幻世(OurDream)2D图形引擎使用教程11——播放媒体文件(1)
声明:本教程版权归Lizcst Software Lab所有,欢迎转载,但是转载必须保留本段声明文字,并注明文章来源:http://blog.csdn.net/kflizcst 谢谢合作! 播放媒体是 ...