①替代out与ref修饰的参数(即方法含有多个

  元组常用多样方式︰

  其泛型元组可以越来越好的拍卖4种状态:

回顾Tuple

Tuple是C# 4.0时出的新特点,.Net Framework 4.0之上版本可用。

元组是生机勃勃种数据构造,具备特定数量和因素连串。比方设计一个长富组数据布局用于存款和储蓄学子消息,生龙活虎共富含四个成分,第三个是名字,第三个是年纪,第多个是身高。

元组的切实可行行使如下:

  我们未来应用的C#语法已经得以满意经常的付出要求,但C#语法还在伸开版本的换代,在开立更加的多更优越的语义来让我们应用。这里介绍一下C#5.0里的提供的语法——元组。

using CityTemperature = Tuple<string, float>;
public static Tuple<string, float> TemperatureOfCity(string cityId)
        {
        //省略数据处理内容
            string cityName = "腾冲";
            float temperature = 23.6f;
            return new CityTemperature(cityName, temperature);
        }

2.    表示风华正茂组数据

如下创立三个值元组表示贰个学员的四个新闻:名字、年龄和身体高度,而不用单独额外创制贰个类。

var studentInfo = ValueTuple.Create<string, int, uint>("Bob", 28, 175);
Console.WriteLine($"Student Information: Name [{studentInfo.Item1}], Age [{studentInfo.Item2}], Height [{studentInfo.Item3}]");

C#语法——泛型的多样行使

  大家在开辟的时候,都会平常境遇三个题材,如何为逻辑上回来八个指标设计艺术签字。平时大家会想到利用out或ref修饰参数,恐怕麻烦些本身设定三个种类内部含有四个Object类型属性来接过五个重返值。这两中艺术都缺乏好,前面一个让程序难以实现多态(out或ref修饰的参数类型,不能够应用派生类代替),设计走向是面向进度,也难以使用链式编制程序;前面一个因为具有的归来都Object类型,所以在动用时都要开展调换来真实的档次。在此种景色下大家得以使用泛型元组类型来处。在.Net 4.0中新扩充了Tuple与Tuple<T1>、Tuple<T1,T2>、Tuple<T1,......,T7,TRest>。就缓和了地点的主题材料。

2.    表示大器晚成组数据

如下创造一个元组表示贰个学员的八个新闻:名字、年龄和身体高度,而不用单独额外创制三个类。

var studentInfo = Tuple.Create<string, int, uint>("Bob", 28, 175);
Console.WriteLine($"Student Information: Name [{studentInfo.Item1}], Age [{studentInfo.Item2}], Height [{studentInfo.Item3}]");

注:此作品为原创,接待转发,请在篇章页面分明地方给出此文链接!
若你认为这篇随笔还不易,请点击下右下角的推荐,非常多谢!

public static float TemperatureOfCity(string cityId, out string cityName)
        {
            //省略数据处理内容
            cityName = "腾冲";
            float temperature = 23.6f;
            return temperature;
        }
public static Tuple<string, float> TemperatureOfCity(string cityId)
        {
            //省略数据处理内容
            string cityName = "腾冲";
            float temperature = 23.6f;
            return new Tuple<string, float>(cityName, temperature);
        }

4.    用于单参数方法的多值传递

当函数参数仅是二个Object类型时,能够选拔值元组完结传递几个值。

static void WriteStudentInfo(Object student)
{
    var studentInfo = (ValueTuple<string, int, uint>)student;
    Console.WriteLine($"Student Information: Name [{studentInfo.Item1}], Age [{studentInfo.Item2}], Height [{studentInfo.Item3}]");
}

static void RunTest()
{
    var t = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(WriteStudentInfo));
    t.Start(new ValueTuple<string, int, uint>("Bob", 28, 175));
    while (t.IsAlive)
    {
        System.Threading.Thread.Sleep(50);
    }
}

  1,用来代表风流浪漫组数据。 比如,三个元组能够表示的数据库记录,而且其组件能够象征每一种字段的笔录。

  只怕您并不期待此类Tuple的定义骚扰了种类的实在含义,幸好C#的设计者也考略到那几个标题,允许大家选取using语句为随机的密封泛型类型声喜宝个别称。

1.    怎么着创造值元组

和元组类相近,.Net Framework值元组也只帮忙1到7个元组成分,如若有8个成分只怕越来越多,必要选取值元组的嵌套和Rest属性去达成。其它ValueTuple类能够提供成立值元组对象的静态方法。

  • 行使构造函数创设元组:
var testTuple6 = new ValueTuple<int, int, int, int, int, int>(1, 2, 3, 4, 5, 6);
Console.WriteLine($"Item 1: {testTuple6.Item1}, Item 6: {testTuple6.Item6}"); 

var testTuple10 = new ValueTuple<int, int, int, int, int, int, int, ValueTuple<int, int, int>>(1, 2, 3, 4, 5, 6, 7, new ValueTuple <int, int, int>(8, 9, 10));
Console.WriteLine($"Item 1: {testTuple10.Item1}, Item 10: {testTuple10.Rest.Item3}");
  • 选取Tuple静态方法营造元组,最多辅助四个要素:
var testTuple6 = ValueTuple.Create<int, int, int, int, int, int>(1, 2, 3, 4, 5, 6);
Console.WriteLine($"Item 1: {testTuple6.Item1}, Item 6: {testTuple6.Item6}"); 

var testTuple8 = ValueTuple.Create<int, int, int, int, int, int, int, int>(1, 2, 3, 4, 5, 6, 7, 8);
Console.WriteLine($"Item 1: {testTuple8.Item1}, Item 8: {testTuple8.Rest.Item1}");

细心这里构建出来的Tuple类型其实是Tuple<int, int, int, int, int, int, int, Tuple<int>>,因而testTuple8.Rest取到的数据类型是Tuple<int>,因而要想博得正确值要求取Item1属性。

优化差异:当协会出超过7个要素以上的值元组后,能够使用接下去的ItemX举行拜访嵌套元组中的值,对于地点的例子,要访谈第十三个要素,不只能够由此testTuple10.Rest.Item3拜候,也足以通过testTuple10.Item10来做客。

var testTuple10 = new ValueTuple<int, int, int, int, int, int, int, ValueTuple<int, int, int>>(1, 2, 3, 4, 5, 6, 7, new ValueTuple<int, int, int>(8, 9, 10));
Console.WriteLine($"Item 10: {testTuple10.Rest.Item3}, Item 10: {testTuple10.Item10}");

  2,若要提供轻易访谈和数据集的操作。

 public class Tuple<T1, T2, T3> : IStructuralEquatable, IStructuralComparable, IComparable
    {
        public Tuple(T1 item1, T2 item2, T3 item3);
        public T1 Item1 { get; }
        public T2 Item2 { get; }
        public T3 Item3 { get; }
    //省略方法的具体实现
        public override bool Equals(object obj);
        public override int GetHashCode();
        public override string ToString();
    //省略对借口的实现
    }

5.    解构ValueTuple

能够由此var (x, y卡塔尔国恐怕(var x, var y卡塔尔来剖析值元组成分构造局地变量,同期可以行使标记”_”来忽视无需的因素。

static (string name, int age, uint height) GetStudentInfo1(string name)
{
    return ("Bob", 28, 175);
}

static void RunTest1()
{
    var (name, age, height) = GetStudentInfo1("Bob");
    Console.WriteLine($"Student Information: Name [{name}], Age [{age}], Height [{height}]");

    (var name1, var age1, var height1) = GetStudentInfo1("Bob");
    Console.WriteLine($"Student Information: Name [{name1}], Age [{age1}], Height [{height1}]");

    var (_, age2, _) = GetStudentInfo1("Bob");
    Console.WriteLine($"Student Information: Age [{age2}]");
}

 

由上所述,ValueTuple使C#变得更简便易行易用。较Tuple比较根本收益如下:

  • ValueTuple扶持函数重临值新语法”(,,卡塔尔”,使代码更简便;
  • 可以给成分命名,方便使用和纪念,这里须要专心就看相名了,然则其实value tuple未有定义那样名字的属性恐怕字段,真正的名字还是是ItemX,全体的要素名字都只是安排和编写翻译时用的,不是运转时用的(由此注意对该类型的体系化和反连串化操作);
  • 能够应用解构方法更有益地利用部分或任何元组的因素;
  • 值元组是值类型,使用起来比援用类型的元组功能高,况且值元组是有相比较艺术的,能够用于相比较是不是等于,详见:

 

[原创小说,转载请注明出处,仅供就学钻研之用,如有错误请留言,如感到不错请推荐,多谢援助]

[原文:]

Tuple VS ValueTuple(元组类 VS 值元组), C# 7.0已经出去大器晚成段时间了,大家都领会新特征里面有个对元组的优化:ValueTuple。这里运用详尽...


  如下:体现了三个泛型Tuple的宣示

详解C# Tuple VS ValueTuple(元组类 VS 值元组),

C# 7.0已经出来黄金年代段时间了,咱们都知晓新特点里面有个对元组的优化:ValueTuple。这里运用详尽的事例详整Tuple VS ValueTuple(元组类VS值元组),10分钟让你更了然ValueTuple的补益和用法。

只要你对Tuple丰硕明白,能够一直跳过章节”回想Tuple”,直达章节”ValueTuple详细解释”,查看值元组的炫耀用法。

 

 

  ①替代out与ref修饰的参数(即方法包涵多个重临值)。

ValueTuple详解

ValueTuple是C# 7.0的新特点之意气风发,.Net Framework 4.7之上版本可用。

值元组也是风姿罗曼蒂克种数据构造,用于表示一定数量和因素连串,然则是和元组类不意气风发致的,主要不同如下:

  • 值元组是构造,是值类型,不是类,而元组(Tuple)是类,援引类型;
  • 值元组成分是可变的,不是只读的,也正是说可以退换值元组中的成分值;
  • 值元组的数量成员是字段不是性质。

值元组的现实性应用如下:

本文由必威发布于必威-编程,转载请注明出处:  ①替代out与ref修饰的参数(即方法含有多个

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。