侧边栏壁纸
博主头像
Komi博主等级

WizMan Komi

  • 累计撰写 30 篇文章
  • 累计创建 43 个标签
  • 累计收到 3 条评论

目 录CONTENT

文章目录

C#中的Tuple与ValueTuple

Komi
2022-09-24 / 0 评论 / 0 点赞 / 22 阅读 / 1,402 字
温馨提示:
内容仅供参考,实际使用需根据自身条件进行调整与删改

ValueTuple是个什么鬼?

如果我们要弄懂什么是ValueTuple,我们首先要明白Tuple是个什么东西:

Tuple实际上是一种数据结构(struct),它由一个有序的、有限的、大小固定的、不可变的异构元素的序列组成

而在.Net FrameWork 4.7(C# 7)后引进了新的Tuple类型ValueTuple,主要是为了能够解决原先Tuple中的两个问题

  1. 能够解决语义化上的问题-以前只能通过Item1,Item2...来访问属性
  2. 解决属性的可写性-在Tuple中的属性只能是可读的,无法修改

如何去创建Tuple?

  1. 普通的new实例化
var tp = new Tuple<string, int>("myname", 24);
  1. Tuple.Create<xxx,xxx>(...)
var tp = Tuple.Create("it1", 12);

Tuple中存在的一些问题

1.最多存储8个属性,再多的属性需要进行Tuple嵌套
屏幕截图 2022-09-24 080616.png
2.属性都是readonly只读的,无法对里面的属性进行直接修改
屏幕截图 2022-09-24 080813.png

屏幕截图 2022-09-24 080826.png

引入C#7中的ValueTuple

如何创建ValueTuple

  1. 老样子 new 一个实例
var tp = new ValueTuple<string?, int, string>(default, 12, "aaa");
  1. ValueTuple.Create<xxx,xxx>()
var tp = ValueTuple.Create<string?,int,string>(default, 12, "aaa");
  1. 使用语法糖()
// 解构声明
(string name , int age , string description) tp = ("tenzai", 12, "abs");

需要注意的是,第三个使用语法糖来声明的创建方式解决了Tuple中只能用Item1,Item2的方式获取对应的值的问题

ValueTuple和Tuple中的一些方法

  1. Tuple转换ValueTuple
var tpa = Tuple.Create("aa", "cc");
var tpacopy = tpa.ToValueTuple();
  1. ValueTuple转换Tuple
(string name, int age, string description) tp = ("tenzai", 12, "abs");
var tpx = tp.ToTuple();
  1. Tuple的解构赋值
var tpa = Tuple.Create("aa", "cc");
string aa, bb = default;
tpa.Deconstruct(out aa, out bb);
  1. 两个ValueTuple的对比
(string name, string desc) tp = ("tenzai", "12");
var tpa = Tuple.Create("aa", "cc");
var tpc = tpa.ToValueTuple();
if (tp == tpc) Console.WriteLine("wow identified!");
0

评论区