C#元组的使用

2022-09-18  本文已影响0人  一个很普通的名字

<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&lt;string, string, string&gt;(&quot;这&quot;, &quot;是一个&quot;, &quot;元组&quot;);</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>/// &lt;summary&gt;</p><p>/// 获取坐标</p><p>/// &lt;/summary&gt;</p><p>/// &lt;returns&gt;&lt;/returns&gt;</p><p>static Tuple&lt;double, double&gt; GetCoordin(){</p><p>&nbsp; &nbsp; &nbsp;return new Tuple&lt;double, double&gt;(113.372901,34.779973);</p><p>}</p><p>var coordin=GetCoordin();</p><p>Console.WriteLine($&quot;经度:{coordin.Item1},纬度:{coordin.Item2}&quot;)</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>/// &lt;summary&gt;</p><p>/// 获取坐标</p><p>/// &lt;/summary&gt;</p><p>/// &lt;returns&gt;&lt;/returns&gt;</p><p>static ValueTuple&lt;double, double&gt; GetCoordinByValueTuple()</p><p>{</p><p>&nbsp; &nbsp; &nbsp;return new ValueTuple&lt;double, double&gt;(113.372901, 34.779973);</p><p>}</p><p>var coordin=GetCoordin();</p><p>Console.WriteLine($&quot;经度:{coordin.Item1},纬度:{coordin.Item2}&quot;)</p><p></p><p>
</p><p>也可以用Tuple静态方法构建元组,最多支持八个元素</p><p>
</p><p>c#</p><p>/// &lt;summary&gt;</p><p>/// 获取坐标</p><p>/// &lt;/summary&gt;</p><p>/// &lt;returns&gt;&lt;/returns&gt;</p><p>static ValueTuple&lt;double, double&gt; GetCoordinByStatic()</p><p>{</p><p>&nbsp; &nbsp; &nbsp;return ValueTuple.Create(113.372901, 34.779973);</p><p>}</p><p>var coordin=GetCoordin();</p><p>Console.WriteLine($&quot;经度:{coordin.Item1},纬度:{coordin.Item2}&quot;)</p><p></p><p>
</p><p>还是麻烦?真是拿你们没办法哟,把ValueTuple扔掉,直接用小括号</p><p>
</p><p>c#</p><p>static (double,double) GetCoordinByParenthesis()</p><p>{</p><p>&nbsp; &nbsp; &nbsp;return (113.372901, 34.779973);</p><p>}</p><p>var coordin=GetCoordin();</p><p>Console.WriteLine($&quot;经度:{coordin.Item1},纬度:{coordin.Item2}&quot;)</p><p></p><p>
</p><p>返回值可以指定元素名字,方便理解记忆赋值和访问,:exclamation: 所有的元素名字都只是设计和编译时用的,不是运行时用的(因此注意对该类型的序列化和反序列化操作);</p><p>
</p><p>c#</p><p>static (double Lon, double Lat) GetCoordinByName()</p><p>{</p><p>&nbsp; &nbsp; &nbsp;return (113.372901, 34.779973);</p><p>}</p><p>var coordin=GetCoordin();</p><p>Console.WriteLine($&quot;经度:{coordin.Lon},纬度:{coordin.Lon}&quot;)</p><p></p><p>
</p><p>在使用时也可以构造局部变量,同时可以用_来忽略不需要的元素</p><p>
</p><p>c#</p><p>static (double Lon, double Lat) GetCoordinByName()</p><p>{</p><p>&nbsp; &nbsp; &nbsp;return (113.372901, 34.779973);</p><p>}</p><p>var (_,lon)=GetCoordin();</p><p>Console.WriteLine($&quot;纬度:{lon}&quot;)</p><p></p><p>
</p><p>告辞:smirk:</p><p>
</p>

上一篇下一篇

猜你喜欢

热点阅读