来源:微信公众号CodeL

今天给大家分享的内容基于前几天收到的一条留言信息,留言内容是这样的:

看了这位网友的留言相信有不少刚接触开发的童鞋们也会有同样的困惑,除了用新建类作为桥梁之外还有什么好的办法?很多童鞋肯定会想到DataSet,不错,DataSet完全可以实现各种数据集的传递,而且还很方便,但是一般我们更推荐使用List集合,那么List集合如何在不确定属性和类的时候传递包含多个字段的集合呢?为一些简单的结构而新建一个类显然是不合理的。

一、4.0新特性中的Tuple

大家可以回顾一下c#4.0中增加的一个新特性,元组Tuple,它是一种固定成员的泛型集合:

下面先看看官方的一个使用例子:

创建一个包含7个元素的Tuple数组

// Create a 7-tuple.

var population = new Tuple<string, int, int, int, int, int, int>( "New York", 7891957, 7781984, 7894862, 7071639, 7322564, 8008278);// Display the first and last elements.

Console.WriteLine("Population of {0} in 2000: {1:N0}",population.Item1, population.Item7);

用法非常简单方便,普通的方式我们可能需要这样:

public class A{

public int ID{get;set;}

public string Name{get;set;}

}

A a=new A(){ID=1001,Name='CodeL'};

Console.WriteLine(a.Name);

而使用Tuple我们只需要这样:

Tuple<int,string> a=new Tuple<int,string>(1001,'CodeL');

Console.WriteLine(a.Item2);//Item1 代表第一个,Item2代表第二个

这样我们就可以不用为了 一些简单的结构或对象而去新建一个类了。
注意的是tuple最多支持8个成员,注意第8个成员很特殊,如果有8个成员,第8个必须是嵌套的tuple类型。

列如:Tuple<string, int, int, int, int, int, int, Tuple<int, int, int>>  红色部分是第8个。

第8个元素使用方法:对象.Rest.Item1,对象.Rest.Item2

 

二、实际场景举例

我们使用Tuple来完成一次简单数据集的传递工作。

将Tuple作为返回值

public List<Tuple<int,string,DateTime>> GetUsers(){

string sql="select ID,Name,CreateTime from Tbl_Users";

using (SqlDataReader r = SqlHelper.ExecuteReader(Connections.AdminDBConString, CommandType.Text, sql))

{

List<Tuple<int,string,DateTime>> list = new List<Tuple<int,string,DateTime>>();

while (r.Read())

{

Tuple<int,string,DateTime> t = new Tuple<int,string,DateTime>(Convert.ToInt32(r[0]),r[1].ToString(),Convert.ToDatetime(r[2]));

list.Add(t);

}

return list;

}

}

使用也非常方便:

List<Tuple<int,string,datetime>> list=GetUsers();

foreach(Tuple<int,string,datetime> t in list)

{

Console.write(t.Item1);//ID

Console.write(t.Item2);//Name

Console.write(t.Item3);//CreateTime

}

到这里大家是不是明白了,上面那位童鞋的问题原来可以这么解决。

个人建议一些简单的结构下可以这么使用,过于复杂的对象结构由于Tuple本身的一些限制(如:最多支持8项内容,超过的需要使用TRest)而操作复杂,我在实际开发中使用Tuple最多嵌套过一层Tuple。

大家在平时的工作学习中可以多多了解更多常用的基本知识,很多看起来不起眼的小东西将会在开发过程中起到非常大的作用。

相关资源获取或其他疑问可在公众号留言。如果你有优秀的原创技术类文章也可以投稿分享给大家赚取赏金哟!

微信扫一扫获取更多开发资源:

浅谈Tuple之C#4.0新特性那些事儿你还记得多少?的更多相关文章

  1. [C#]6.0新特性浅谈

    原文:[C#]6.0新特性浅谈 C#6.0出来也有很长一段时间了,虽然新的特性和语法趋于稳定,但是对于大多数程序猿来说,想在工作中用上C#6.0估计还得等上不短的一段时间.所以现在再来聊一聊新版本带来 ...

  2. C# 7.0 新特性1: 基于Tuple的“多”返回值方法

    本文基于Roslyn项目中的Issue:#347 展开讨论. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: ...

  3. [翻译] C# 8.0 新特性 Redis基本使用及百亿数据量中的使用技巧分享(附视频地址及观看指南) 【由浅至深】redis 实现发布订阅的几种方式 .NET Core开发者的福音之玩转Redis的又一傻瓜式神器推荐

    [翻译] C# 8.0 新特性 2018-11-13 17:04 by Rwing, 1179 阅读, 24 评论, 收藏, 编辑 原文: Building C# 8.0[译注:原文主标题如此,但内容 ...

  4. 浅谈linux中shell变量$#,$@,$0,$1,$2,$?的含义解释

    浅谈linux中shell变量$#,$@,$0,$1,$2,$?的含义解释 下面小编就为大家带来一篇浅谈linux中shell变量$#,$@,$0,$1,$2的含义解释.小编觉得挺不错的,现在就分享给 ...

  5. C# 7.0 新特性2: 本地方法

    本文参考Roslyn项目中的Issue:#259. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: 模式匹配 ...

  6. C# 7.0 新特性3: 模式匹配

    本文参考Roslyn项目Issue:#206,及Docs:#patterns. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# ...

  7. C# 7.0 新特性4: 返回引用

    本文参考Roslyn项目中的Issue:#118. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: 模式匹配 ...

  8. C#6.0,C#7.0新特性

    C#6.0新特性 Auto-Property enhancements(自动属性增强) Read-only auto-properties (真正的只读属性) Auto-Property Initia ...

  9. C#7.0&6.0新特性 — 完整版

    C#2.0 泛型 部分类型 匿名方法 迭代器 可空类型 Getter / setter单独可访问性 方法组转换(代表) Co- and Contra-variance for delegates 静态 ...

随机推荐

  1. webapi swagger自定义 HTTP Header验证用户

    问题描述 webapi自定义的一种验证方式(token放入header里),使用swagger测试时由于header里没值所以一直拿不到用户. 解决如下:(从标题2开始,标题1处处理全局验证用户) 1 ...

  2. KB,Kb单位换算,网络带宽中的Kbps和KB/s到底是什么意思? (注:B和b的区别)

    B是指字节(Byte)1个字节有8个比特组成    b是指比特(bit)代表一个2进制位(值为0或1) 上过网的朋友应该会听说过网络带宽这个词,可是这个网络带宽的单位到底是什么,为什么有的人说Kbps ...

  3. java web学习总结(四) -------------------HTTP协议

    一.什么是HTTP协议 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的 ...

  4. spring整合hibernate

    spring整合hibernate包括三部分:hibernate的配置.hibernate核心对象交给spring管理.事务由AOP控制 好处: 由java代码进行配置,摆脱硬编码,连接数据库等信息更 ...

  5. [转载]C#使用Interlocked进行原子操作

    原文链接:王旭博客 » C# 使用Interlocked进行原子操作 什么是原子操作? 原子(atom)本意是"不能被进一步分割的最小粒子",而原子操作(atomic operat ...

  6. CSS中越界问题经典解决方案

    8.CSS相关知识 (1)如何解决父元素的第一个子元素的margin-top越界问题 1)为父元素加border-top: 1px;——有副作用 2)为父元素指定padding-top: 1px;—— ...

  7. Webstorm常用的快捷键

    WS的常用操作: 常用快捷键(Keymap/Eclipse): 复制当前行: Ctrl+Alt+↓ 向上/下移动当前行: Alt+↑/↓ 删除当前行: Ctrl+D 注释/取消当前行: Ctrl+/ ...

  8. Day Tips:关于搜索小问题

    1.如果想重启SPSearchHostController请确保没有服务在运行,如果有爬网运行可能会导致重启失败,使之处于stoping状态,不过遇到这个状态也不要紧使用 taskkill /f /f ...

  9. iOS 直播-网速监控

    iOS 直播-网速监控 CXNetworkSpeed.h // // CXNetworkSpeed.h // CXNetworkSpeedDemo // // Created by xubaoaich ...

  10. Mac使用极简教程

    最近领导让我写一篇关于Mac的使用教程,因为使用人群未知,所以尽量写的通俗易懂,可谓是关于Mac电脑使用的精简教程吧,在此发表出来以供参考. Mac因为安全性而闻名,我们拥有了一部Mac,那么我们来了 ...