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#中元组的妙用的主要内容,如果未能解决你的问题,请参考以下文章