C#中元组的妙用

Posted 文先生爱学习

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中元组的妙用相关的知识,希望对你有一定的参考价值。

元组

元组是什么?如下两个都是元组,类似数组的感觉。

(1,2,3)

("abc",2)

能用元组的地方,基本上用class也都可以实现,那么为何还要元组呢?

对于元组,我对其的理解就是“方便快速使用”。



第一种场景:直接赋值

这种方式,对于一次性使用数据对象时,就免去了创建class的过程。

var results = (1, 2, 3, "Name","Time");  
// 等价于 var ( Item1, Item2, Item3, Item4, Item5)
Console.WriteLine(results);
Console.WriteLine(results.Item1 + "," + results.Item2 + "," + results.Item3);

第二种场景:函数返回元组

这种方式是常用的,调用函数执行完某个功能,返回执行结果,但是这个结果可以多次传递使用时,就可以使用元组。

results = GetTupleDataOne(rnd);
results.Item2 = 3;
Console.WriteLine(results);

新增如下辅助测试示例函数:

private (int, int, int, string, string) GetTupleDataOne(Random rnd)

return (1, 1, 1, "One", (rnd).Next(1, 1000).ToString());

第三种场景:逐个字段命名

有些时候,可能需要直接命名,这样更好理解每个字段含义,不过,也可以看出这个弊端,这样子快和写一个新的class差不多了,所以,我不怎么用这种。

(int i1, int i2, int i3, string name, string time) = GetTupleDataOne(rnd);
Console.WriteLine($"i1 i2 i3 name time");

第四种场景:已有变量 + 弃元

遇到弃元,虽然元组返回多个数据,但是我只想要其中某两个的时候,可以使用这种写法,而且将数据返回到已有变量中。

string Name, Time;
(_, _, _, Name, Time) = GetTupleDataOne(rnd);
Console.WriteLine($"i1 i2 i3 name Time");

第五种场景:对class 添加Deconstruct方法

对于类对象,也可以方便的获取其成员变成元组数据,这里使用Deconstruct方法。这样后续使用该功能的时候,就不用主动明显的调用方法。

var p = new PersonEx("A1", "B1", "C1", "D1", "G1");

// 调用Deconstruct方法,快速获取p的数据,并赋值到元组上。
var (fName, lName, city, state) = p;
var (fName1, lName1) = p;
Console.WriteLine($" fName lName city state");
class PersonEx

public string N1 get; set;
public string N2 get; set;
public string N3 get; set;
public string C1 get; set;
public string S1 get; set;
public PersonEx(string n1, string n2, string n3,
string c1, string s1)

N1 = n1;
N2 = n2;
N3 = n3;
C1 = c1;
S1 = s1;

// Return the first and last name.
public void Deconstruct(out string n1, out string n3)

n1 = N1;
n3 = N3;

public void Deconstruct(out string n1, out string n2, out string n3)

n1 = N1;
n2 = N2;
n3 = N3;

public void Deconstruct(out string n1, out string n3,
out string c1, out string s1)

n1 = N1;
n3 = N3;
c1 = C1;
s1 = S1;


小结

元组只是一种方便快捷的数据类型,得根据使用场景挑选使用,很多时候可能用不到它,毕竟很久以前没有它的存在,C#过的也很好。


以上是关于C#中元组的妙用的主要内容,如果未能解决你的问题,请参考以下文章

获取包含元组的列表的索引,其中元组的第一个元素与模式匹配

我如何获得haskell中元组的索引?

Spring Boot中的本机查询,列表中元组的WHERE条件

关于Python中元组的问题

Pandas:使用字典中元组的列标题和单元格值创建数据框

如何访问列表中元组的第一个元素?