栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

如何使用 C# 中的 Tuple

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用 C# 中的 Tuple

开局一张图,首先声明的是 Tuple 不是什么新鲜概念,在编程语言 F#,Python 中早就有这个了,Tuple 是一种 有序的,有限不可变的,支持混杂类型的固定个数的 一种数据结构,有些朋友可能就想问了,这里的混杂是什么意思? 其实就是说 Tuple 中的若干元素类型,即可以是同类型,也可以是不同类型。

值得注意的是,Tuple 中的元素是 只读的,而且其元素的顺序也是在 Tuple 创建的时候指定好的,不能对其中的元素进行后续修改 也不能修改 Tuple 的大小。

为什么要使用 Tuple

下面罗列了几种使用 Tuple 的场景:

  • 如果你的方法需要返回多个值 或者 方法需要传递多个值。

  • 如果你不想为某些功能专门去定义一个类。

  • 如果你有若干个混杂元素,并且想提供对其简单的访问方式。

上面三种情况都是 Tuple 最擅长的应用场景,值得用 Tuple 去解决。

有些朋友可能会想到 匿名类,但仔细想想, 匿名类 也有其缺陷,比如说方法的返回值是不可能指定为匿名类型的,对吧。

当然 Tuple 也是有缺陷的,罗列如下:

  • 当你访问 Tuple 中的元素时,你会发现只能使用 Item1, Item2, Item3 这样的形式,很显然这种太不易读了,而且一旦 Tuple 中的元素过多,维护起来也是一种负担。

  • Tuple 是引用类型不是值类型,意味着它会在 托管堆 上进行内存分配,如果 Tuple 过大并且没有很好的释放,对程序也是一个不小的性能挑战。

C# 中使用 Tuple

叨叨叨的说了这么多,接下来看看如何使用,在 C# 中提供了一个 Tuple 类,这个类下有一个静态方法 Create 可用来生成 Tuple 实例,顺便提一下,这个 Create 方法提供了 8 个重载方法,下面展示了这些方法签名清单。


public static class Tuple
{
	public static Tuple Create(T1 item1)
	{
		return new Tuple(item1);
	}

	public static Tuple Create(T1 item1, T2 item2)
	{
		return new Tuple(item1, item2);
	}

	public static Tuple Create(T1 item1, T2 item2, T3 item3)
	{
		return new Tuple(item1, item2, item3);
	}

	public static Tuple Create(T1 item1, T2 item2, T3 item3, T4 item4)
	{
		return new Tuple(item1, item2, item3, item4);
	}

	public static Tuple Create(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5)
	{
		return new Tuple(item1, item2, item3, item4, item5);
	}

	public static Tuple Create(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6)
	{
		return new Tuple(item1, item2, item3, item4, item5, item6);
	}

	public static Tuple Create(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7)
	{
		return new Tuple(item1, item2, item3, item4, item5, item6, item7);
	}

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

接下来看看如何创建和初始化 Tuple。

     var listEmployee = new List>
     {
Tuple.Create(1, "Joydip Kanjilal", "INDIA"),
Tuple.Create(2, "Michael Stevens", "USA" ),
Tuple.Create(3, "Steve Barnes", "USA" )
     };

一旦你的 Tuple 创建并初始化好,你可以像迭代其他集合一样迭代 Tuple,下面的代码清单展示了如何去实现。


     foreach (Tuple tuple in listEmployee)
     {
  Console.WriteLine(tuple.Item2);
     }

下面是完整的代码清单展示了如何去 创建,初始化,迭代。


 static void Main(string[] args)
 {
     var listEmployee = new List>
     {
  Tuple.Create(1, "Joydip Kanjilal", "INDIA"),
  Tuple.Create(2, "Michael Stevens", "USA" ),
  Tuple.Create(3, "Steve Barnes", "USA" )
     };

     foreach (Tuple tuple in listEmployee)
     {
  Console.WriteLine(tuple.Item2);
     }
     Console.Read();
 }

你也可以创建 嵌套的 Tuple,如下代码所示:


 static void Main(string[] args)
 {
     var tuple = Tuple.Create(1, "Joydip Kanjilal", new Tuple("Hyderabad", "India"));
 }

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号