元祖Tuple

简介: `Tuple`和`ValueTuple`是.NET中的元组类型,`ValueTuple`是值类型,结构体,成员为可修改的字段,而`Tuple`是引用类型,成员为只读属性。微软推荐使用`ValueTuple`,因其性能更优并有语法支持,如简化的声明`(Type, Type,...)`,值相等比较,元素命名和解构赋值。元组常用于方法返回多个值。

元祖 Tuple 其实就微软内置的一组包含若干个属性的泛型类型,包括结构体类型的 System.ValueTuple、引用类型的 System.Tuple,包含1到8个只读属性。

  • System.ValueTuple,是值类型,结构体,成员是字段,可修改。
  • System.Tuple 类型是引用类型,成员是只读属性。

📢 优先推荐使用 ValueTuple,这也是微软深度支持的,性能更好,默认类型推断用的都是ValueTuple。Tuple 作为历史的产物,在语言级别没有任何特殊支持。

下面代码为Tuple<T1>的源代码,就是这么朴实无华,其他就是相等比较、ToString、索引器。

public struct ValueTuple<T1, T2>
{
  public T1 Item1;
  public T2 Item2;
  public ValueTuple(T1 item1, T2 item2)
  {
    Item1 = item1;
    Item2 = item2;
  }
}

🚩C#在语法层面对ValueTuple的操作提供了很多便捷支持,让元祖的使用非常简单、优雅,基本可以替代匿名类型。

  • 简化 Tuplec 申明:用括号的简化语法,(Type,Type,...)(string,int)等效于ValueTuple<string,int>,编译器会进行类型推断。
  • 值相等:元祖内部实现了相等比较操作符重载,比较的是字段值。
  • 元素命名:元祖可以显示指定字段名称,比原来的无意义Item1、Item2好用多了。不过命名是开发态支持,编译后还是Item1、Item2,因此在运行时(反射)不可用。
  • 解构赋值,元祖对解构的支持是编译器行为。
ValueTuple<double,double> p1 = new (1,5);
//简化语法
(double, double) p2 = (3, 5.5);
var p3 = (3, 5.5); //类型推断,进一步简化
var dis = p2.Item1 * p2.Item2; //Item1、Item2 成员
//值比较
Console.WriteLine(p2 == p3); //True
//命名,有名字的元祖
var p4 = (Name:"sam",Age:22);
Console.WriteLine(p4.Name); //sam
//解构赋值
var (n,age) = p4;
Console.WriteLine(n); //sam

元祖的一个比较适用场景就是方法返回多个值,虽然本质上还是一个“值”。

void Main()
{
  var u = FindUser(1);
  var (nn,ss) = FindUser(2);
  Console.WriteLine(u.name+u.score);
  Console.WriteLine(nn+ss);
}
public (string name,int score) FindUser(int id) //返回一个元祖
{
  return ("sam",1000);
}
相关文章
|
Swift
swift(2)元祖(Tuple)
let somePoint = (1, 1) switch somePoint { case (0, 0): // 位于远点 println("(0, 0) is at the origin") case (_, 0): // x为任意值,y为0,即在 X 轴上 println("(\(somePoint.
613 0
|
1月前
|
Python
Python元组tuple“删除”元素的两种函数代码设计
实际上,Python的tuple元组内的元素是不能被修改的,因此也是无法被删除的,但是,为了移除Python元组tuple内的某些元素,以获得一个新的元组,还是有其办法存在的。比如,我们可以使用for循环添加的方法,来创建一个不包含那些需要被移除的元素的新元组。Python中元组添加元素的内置方法为__add__()方法,实际上,该方法也是
57 4
|
16天前
|
存储 索引 Python
元组(Tuple)在Python编程中的应用与实例
元组(Tuple)在Python编程中的应用与实例
22 2
|
1月前
|
Python
【Python 基础】列表(list)和元组(tuple)有什么区别?
【5月更文挑战第6天】【Python 基础】列表(list)和元组(tuple)有什么区别?
|
1月前
|
存储 安全 Java
Python教程第3章 | 集合(List列表、Tuple元组、Dict字典、Set)
Python 列表、无序列表、字典、元组增删改查基本用法和注意事项
57 1
|
1月前
|
存储 Python
Python中的列表(list)和元组(tuple)区别
Python中的列表(list)和元组(tuple)区别
44 0
|
1月前
|
存储 索引 Python
Python容器专题 - 元组(tuple)
Python容器专题 - 元组(tuple)
41 0
|
1月前
|
存储 安全 索引
python中的原组Tuple
python中的原组Tuple
24 1