程序集:System.Runtime.dll
提供用于创造元组对象的静态方法。
用法:
var primes = Tuple.Create(2, 3, 5, 7, 11, 13, 17, 19);
Console.WriteLine("Prime numbers less than 20: " +
"{0}, {1}, {2}, {3}, {4}, {5}, {6}, and {7}",
primes.Item1, primes.Item2, primes.Item3,
primes.Item4, primes.Item5, primes.Item6,
primes.Item7, primes.Rest.Item1);
// The example displays the following output:
// Prime numbers less than 20: 2, 3, 5, 7, 11, 13, 17, and 19
提供用于创建值元组的静态方法。
用法:
(int, string) x1 = ValueTuple.Create(24, "zs");
System.ValueTuple 类型支持的 C# 元组不同于 System.Tuple 类型表示的元组。 主要区别如下:
System.ValueTuple
类型是值类型。 System.Tuple
类型是引用类型。System.ValueTuple
类型的值是可变的。 System.Tuple
类型的值是不可变的。System.ValueTuple
类型的数据成员是字段。 System.Tuple
类型的数据成员是属性。System.ValueTuple
类型的值是可变的什么是可变的呢,其实就是可以get和set,举例说明,下面这段代码是不会出现错误提示的
var person = ( 24, "张三");
person.Item1 = 3;
System.Tuple
类型的值是不可变的这个类型的属性是只读的(get),举例说明
System.ValueTuple
类型的数据成员是字段数据字段就是可以给字段取一个名字,而System.Tuple
只能用Item1,Item2这样的方式进行获取
举例
var person = (age: 24, name: "张三");
person.age = 3;
搞c#的都知道匿名类,比如 var x = new {Name="张三",Age=24}
这样一段代码就是new了一个匿名对象
对比匿名类和元组的区别
你可能希望始终使用 ValueTuple(而不是 Tuple)和匿名类型,但应进行一些权衡考虑。 ValueTuple 类型是可变的,而 Tuple 是只读的。 匿名类型可用于表达式树,而元组不行。 下表概述了一些关键区别。
“属性” | 访问修饰符 | 类型 | 自定义成员名称 | 析构支持 | 表达式树支持 |
---|---|---|---|---|---|
匿名类型 | internal |
class |
✔️ | ❌ | ✔️ |
Tuple | public |
class |
❌ | ❌ | ✔️ |
ValueTuple | public |
struct |
✔️ | ✔️ | ❌ |
选择类型时的一个重要考量是,是否需要对其进行序列化。 序列化是将对象状态转换为可保持或传输的形式的过程。 有关详细信息,请参阅序列化。 当序列化非常重要时,创建 class
或 struct
优于使用匿名类型或元组类型。
https://learn.microsoft.com/zh-cn/dotnet/standard/base-types/choosing-between-anonymous-and-tuple
https://learn.microsoft.com/zh-cn/dotnet/api/system.valuetuple?view=net-7.0
https://learn.microsoft.com/zh-cn/dotnet/csharp/language-reference/builtin-types/value-tuples#tuples-vs-systemtuple
https://learn.microsoft.com/zh-cn/dotnet/api/system.tuple?view=net-7.0#code-try-1