元组

析构元组

var (name, address, city, zip) = contact.GetAddressInfo();

析构用户定义类型

通过实现一个或多个 Deconstruct方法来析构该类型的实例

public void Deconstruct(out string fname, out string mname, out string lname)

使用扩展方法析构用户定义的类型

该方法返回 void,且要析构的每个值由方法签名中的 out 参数指示

public static void Deconstruct(this PropertyInfo p, out bool isStatic,
                                   out bool isReadOnly, out bool isIndexed,
                                   out Type propertyType)

PropertyInfo prop = dateType.GetProperty("Now");
var (isStatic, isRO, isIndexed, propType) = prop;

推断元组元素名称

元组元素的名称可通过在初始化元组时使用的变量进行推断:

int count = 5;
string label = "Colors used in the map";
var pair = (count, label); // element names are "count" and "label"

支持 == 和 !=

两个元组具有相同数量的元素,且对于每个元组位置,可以使用 == 和 != 运算符对左右侧元组操作数中的相应元素进行比较

(int a, byte b) left = (5, 10);
(long a, int b) right = (5, 10);
Console.WriteLine(left == right);  // output: True
Console.WriteLine(left != right);  // output: False

var t1 = (A: 5, B: 10);
var t2 = (B: 5, A: 10);
Console.WriteLine(t1 == t2);  // output: True
Console.WriteLine(t1 != t2);  // output: False

== 和 != 操作不会考虑元组字段名称。

== 和 != 运算符将以短路方式对元组进行比较。  

  

在匿名类型和元组类型之间进行选择

主要区别
“属性”访问修饰符类型自定义成员名称析构支持表达式树支持
匿名类型 internal class ✔️ ✔️
Tuple public class ✔️
ValueTuple public struct ✔️ ✔️

在元组和匿名类型之间进行选择时,需要考虑几个因素。 一般来说,如果不使用表达式树,并且你熟悉元组语法,请选择 ValueTuple,因为它们提供可灵活命名属性的值类型。 如果使用表达式树并且想要命名属性,请选择匿名类型。

 ValueTuple 类型是可变的,而 Tuple 是只读的。  

原文地址:https://www.cnblogs.com/yetsen/p/13428211.html