1.元組(Tuple)
元組(Tuple)在4.0 的時候就有了,但元組也有些缺點,如:
1)Tuple 會影響代碼的可讀性,因為它的屬性名都是:Item1,Item2.. 。
2)Tuple 還不夠輕量級,因為它是引用類型(Class),對於一個變量要使用一個類型,有點太沒必要了。
源代碼如下:
1 // 2 // 摘要: 3 // 提供用於創造元組對象的靜態方法。若要浏覽此類型的.NET Framework 源代碼,請參閱 Reference Source。 4 public static class Tuple 5 { 6 // 返回結果: 7 // 一個元組,其值 (item1)。 8 public static Tuple<T1> Create<T1>(T1 item1); 9 10 // 返回結果: 11 // 一個 2 元組,其值 (item1, ,item2)。 12 public static Tuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2); 13 }提供用於創造元組對象的靜態方法
備注:上述所指 Tuple 還不夠輕量級,是從某種意義上來說的或者是一種假設,即假設分配操作非常的多。
C# 7 中的元組(ValueTuple)解決了上述兩個缺點:
1)ValueTuple 支持語義上的字段命名,可以為每一個屬性名字自定義名稱.如(int first,int second) tuple=(1,2)。
2)ValueTuple 是值類型(Struct)。
注:如果vs報沒有預定義類型ValueTuple<...>的錯誤時,需要使用nuget命令導入: Install - Package System.ValueTuple
源代碼如下(ValueTuple<...>內部原理):
1 public struct ValueTuple<T1, T2> : IEquatable<ValueTuple<T1, T2>>, IStructuralEquatable, IStructuralComparable, IComparable, IComparable<ValueTuple<T1, T2>>, ITupleInternal 2 { 3 public T1 Item1; 4 public T2 Item2; 5 int ITupleInternal.Size 6 { 7 get 8 { 9 return 2; 10 } 11 } 12 public ValueTuple(T1 item1, T2 item2) 13 { 14 this.Item1 = item1; 15 this.Item2 = item2; 16 } 17 }ValueTuple(結構)
總結:元組的出現在一定程度上簡化了面向對象,有些不必要或者很少使用的對象可以直接使用元組來返回,而不需要再通過類型的方式去返回