<p>元组(Tuple)是在C# 4.0时出的新特性,需要.Net Framework 4.0以上版本支持。</p><p>
</p><p>元组是一种数据结构,具有特定数量和元素序列。</p><p>
</p><p>#### 创建一个元组</p><p>
</p><p>c#</p><p>var testTuple = new Tuple<string, string, string>("这", "是一个", "元组");</p><p>Console.WriteLine(test.Item1 + test.Item2 + test.Item3);</p><p>
</p><p>
</p><p>#### 使用场景</p><p>
</p><p>从方法返回多个值</p><p>
</p><p>c#</p><p>/// <summary></p><p>/// 获取坐标</p><p>/// </summary></p><p>/// <returns></returns></p><p>static Tuple<double, double> GetCoordin(){</p><p> return new Tuple<double, double>(113.372901,34.779973);</p><p>}</p><p>var coordin=GetCoordin();</p><p>Console.WriteLine($"经度:{coordin.Item1},纬度:{coordin.Item2}")</p><p>
</p><p>
</p><p>#### 每一次都声明一个元组太麻烦了?</p><p>
</p><p>来试试值元组(ValueTuple),ValueTuple是C# 7.0的新特性,使用时需要.Net Framework 4.7以上版本支持或者4.0以上安装System.ValueType包</p><p>
</p><p>值元组也是一种数据结构,用于表示特定数量和元素序列,但是是和元组类不一样的,主要区别如下:</p><p>
</p><p>- 值元组是结构,是值类型,不是类,而元组(Tuple)是类,引用类型;</p><p>- 值元组元素是可变的,不是只读的,也就是说可以改变值元组中的元素值;</p><p>- 值元组的数据成员是字段不是属性。</p><p>
</p><p>要注意的是:ValueTuple是结构类型,微软建议超过64字节不要使用结构,对ValueTuple 同样有效。</p><p>
</p><p>#### 创建一个值元组</p><p>
</p><p>值元组可以像元组一样利用构造函数创建</p><p>
</p><p>c#</p><p>/// <summary></p><p>/// 获取坐标</p><p>/// </summary></p><p>/// <returns></returns></p><p>static ValueTuple<double, double> GetCoordinByValueTuple()</p><p>{</p><p> return new ValueTuple<double, double>(113.372901, 34.779973);</p><p>}</p><p>var coordin=GetCoordin();</p><p>Console.WriteLine($"经度:{coordin.Item1},纬度:{coordin.Item2}")</p><p>
</p><p>
</p><p>也可以用Tuple静态方法构建元组,最多支持八个元素</p><p>
</p><p>c#</p><p>/// <summary></p><p>/// 获取坐标</p><p>/// </summary></p><p>/// <returns></returns></p><p>static ValueTuple<double, double> GetCoordinByStatic()</p><p>{</p><p> return ValueTuple.Create(113.372901, 34.779973);</p><p>}</p><p>var coordin=GetCoordin();</p><p>Console.WriteLine($"经度:{coordin.Item1},纬度:{coordin.Item2}")</p><p>
</p><p>
</p><p>还是麻烦?真是拿你们没办法哟,把ValueTuple扔掉,直接用小括号</p><p>
</p><p>c#</p><p>static (double,double) GetCoordinByParenthesis()</p><p>{</p><p> return (113.372901, 34.779973);</p><p>}</p><p>var coordin=GetCoordin();</p><p>Console.WriteLine($"经度:{coordin.Item1},纬度:{coordin.Item2}")</p><p>
</p><p>
</p><p>返回值可以指定元素名字,方便理解记忆赋值和访问,:exclamation: 所有的元素名字都只是设计和编译时用的,不是运行时用的(因此注意对该类型的序列化和反序列化操作);</p><p>
</p><p>c#</p><p>static (double Lon, double Lat) GetCoordinByName()</p><p>{</p><p> return (113.372901, 34.779973);</p><p>}</p><p>var coordin=GetCoordin();</p><p>Console.WriteLine($"经度:{coordin.Lon},纬度:{coordin.Lon}")</p><p>
</p><p>
</p><p>在使用时也可以构造局部变量,同时可以用_来忽略不需要的元素</p><p>
</p><p>c#</p><p>static (double Lon, double Lat) GetCoordinByName()</p><p>{</p><p> return (113.372901, 34.779973);</p><p>}</p><p>var (_,lon)=GetCoordin();</p><p>Console.WriteLine($"纬度:{lon}")</p><p>
</p><p>
</p><p>告辞:smirk:</p><p>
</p>
网友评论