浅谈Tuple之C#4.0新特性那些事儿你还记得多少?
来源:微信公众号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新特性那些事儿你还记得多少?的更多相关文章
- [C#]6.0新特性浅谈
原文:[C#]6.0新特性浅谈 C#6.0出来也有很长一段时间了,虽然新的特性和语法趋于稳定,但是对于大多数程序猿来说,想在工作中用上C#6.0估计还得等上不短的一段时间.所以现在再来聊一聊新版本带来 ...
- C# 7.0 新特性1: 基于Tuple的“多”返回值方法
本文基于Roslyn项目中的Issue:#347 展开讨论. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性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[译注:原文主标题如此,但内容 ...
- 浅谈linux中shell变量$#,$@,$0,$1,$2,$?的含义解释
浅谈linux中shell变量$#,$@,$0,$1,$2,$?的含义解释 下面小编就为大家带来一篇浅谈linux中shell变量$#,$@,$0,$1,$2的含义解释.小编觉得挺不错的,现在就分享给 ...
- C# 7.0 新特性2: 本地方法
本文参考Roslyn项目中的Issue:#259. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: 模式匹配 ...
- C# 7.0 新特性3: 模式匹配
本文参考Roslyn项目Issue:#206,及Docs:#patterns. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# ...
- C# 7.0 新特性4: 返回引用
本文参考Roslyn项目中的Issue:#118. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: 模式匹配 ...
- C#6.0,C#7.0新特性
C#6.0新特性 Auto-Property enhancements(自动属性增强) Read-only auto-properties (真正的只读属性) Auto-Property Initia ...
- C#7.0&6.0新特性 — 完整版
C#2.0 泛型 部分类型 匿名方法 迭代器 可空类型 Getter / setter单独可访问性 方法组转换(代表) Co- and Contra-variance for delegates 静态 ...
随机推荐
- 推荐几个Web前端开发实用的Chrome插件
越来越多的前端开发人员喜欢在Chrome里开发调试代码,Chrome有许多优秀的插件可以帮助前端开发人员极大的提高工作效率.尤其Chrome本身是可以登录的,登录后你所有的插件都会自动同步到每一个登录 ...
- 使用VS Code开发调试.NET Core 多项目
使用Visual Studio Code(VS Code)开发调试.NET Core和ASP.NET Core 多项目multiple project. 之前讲解过如果使用Visual Studio ...
- clientTarget与用户代理别名
将特定用户代理的别名添加到用户代理别名的内部集合中. 来自 <https://msdn.microsoft.com/zh-cn/library/6379d90d(v=vs.110).aspx&g ...
- Artificial intelligence(AI)
ORM: https://github.com/sunkaixuan/SqlSugar 微软DEMO: https://github.com/Microsoft/BotBuilder 注册KEY:ht ...
- Java 批量插入数据(Oracle)
//批量添加20000条数据用时8秒. try { String url = "jdbc:oracle:thin:@IP:1521:orcl"; // orcl为数据库的SI ...
- 转载:《TypeScript 中文入门教程》 7、模块
版权 文章转载自:https://github.com/zhongsp 建议您直接跳转到上面的网址查看最新版本. 关于术语的一点说明: 请务必注意一点,TypeScript 1.5里术语名已经发生了变 ...
- UDS(ISO14229-2006) 汉译(No.6 应用层服务)
6.1总览 应用层服务通常被当作诊断服务.应用层服务用于在基于客户端-服务器的系统(Client-Server base System)中执行一些功能,例如针对车载服务器(ECU)的检测.检查.监控和 ...
- Linux中shell脚本自动输入密码
最近遇到蛋疼的事,就是在shell脚本中需要获取root权限,因此在shell脚本运行过程中需要输入密码. 懒惰的我当然想让shell在执行过程中就可以自动输入密码,这样就可以抽空看看妹子图.. 我通 ...
- PHP 命名空间(namespace)
PHP 命名空间(namespace) PHP 命名空间(namespace)是在PHP 5.3中加入的,如果你学过C#和Java,那命名空间就不算什么新事物. 不过在PHP当中还是有着相当重要的意义 ...
- angular使用post、get向后台传参的问题
一.问题的来源 我们都知道向后台传参可以使用get.put,其形式就类似于name=jyy&id=001.但是在ng中我却发现使用$http post进行异步传输的过程中后台是接收不到数据的. ...