C#中元组的妙用

提兵百万西湖上,立马吴山第一峰!这篇文章主要讲述C#中元组的妙用相关的知识,希望能为你提供帮助。
元组元组是什么?如下两个都是元组,类似数组的感觉。

(1,2,3)
("abc",2)
【C#中元组的妙用】能用元组的地方,基本上用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 lNamecity state");

class PersonEx

public string N1get; set;
public string N2get; set;
public string N3get; set;
public string C1get; set;
public string S1get; 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#过的也很好。



    推荐阅读