C# Tuple(元組)

Tuple<T>類是在 .NET Framework4.0 中引入的。元組是一種包含不同數(shù)據(jù)類型的元素序列的數(shù)據(jù)結(jié)構(gòu)。它可以用于需要數(shù)據(jù)結(jié)構(gòu)來保存具有屬性的對(duì)象,但又不想為其創(chuàng)建單獨(dú)類型的情況。

語法:

Tuple<T1, T2, T3, T4, T5, T6, T7, TRest>

下面的示例創(chuàng)建一個(gè)包含三個(gè)元素的元組:

Tuple<int, string, string> person = new Tuple <int, string, string>(1, "Steve", "Jobs");

在上面的示例中,我們創(chuàng)建了一個(gè)Tuple包含一個(gè)人的記錄的實(shí)例。我們?yōu)槊總€(gè)元素指定一種類型,并將值傳遞給構(gòu)造函數(shù)。指定每個(gè)元素的類型很麻煩。C#引入了一個(gè)靜態(tài)幫助器類Tuple,,該類返回Tuple <T>的實(shí)例,而不必指定每個(gè)元素的類型,如下所示。

var person = Tuple.Create(1, "Steve", "Jobs");

一個(gè)元組最多只能包含八個(gè)元素。當(dāng)您嘗試包含八個(gè)以上的元素時(shí),它將產(chǎn)生編譯器錯(cuò)誤。

var numbers = Tuple.Create(1, 2, 3, 4, 5, 6, 7, 8);

訪問元組元素

元組元素可以通過 Item < elementnumber > 屬性訪問,例如 Item1、 Item2、 Item3等,最多可以訪問 Item7屬性。Item1屬性返回第一個(gè)元素,Item2返回第二個(gè)元素,依此類推。最后一個(gè)元素(第8個(gè)元素)將使用 Rest 屬性返回。

var person = Tuple.Create(1, "Steve", "Jobs");
person.Item1; // 返回 1
person.Item2; // 返回 "Steve"
person.Item3; // 返回 "Jobs"


var numbers = Tuple.Create("One", 2, 3, "Four", 5, "Six", 7, 8);
numbers.Item1; // 返回 "One"
numbers.Item2; // 返回 2
numbers.Item3; // 返回 3
numbers.Item4; // 返回 "Four"
numbers.Item5; // 返回 5
numbers.Item6; // 返回 "Six"
numbers.Item7; // 返回 7
numbers.Rest; // 返回 (8)
numbers.Rest.Item1; // 返回 8

通常,第8個(gè)位置用于嵌套元組,您可以使用Rest屬性訪問該位置。

嵌套元組

如果要在一個(gè)元組中包含八個(gè)以上的元素,則可以通過嵌套另一個(gè)元組對(duì)象作為第八個(gè)元素來實(shí)現(xiàn)??梢允褂肦est屬性訪問最后一個(gè)嵌套元組。要訪問嵌套元組的元素,請(qǐng)使用Rest.Item1.Item<elelementNumber>屬性。

var numbers = Tuple.Create(1, 2, 3, 4, 5, 6, 7, Tuple.Create(8, 9, 10, 11, 12, 13));
numbers.Item1; // 返回 1
numbers.Item7; // 返回 7
numbers.Rest.Item1; //返回(8,9,10,11,12,13)
numbers.Rest.Item1.Item1; //返回 8
numbers.Rest.Item1.Item2; //返回 9

您可以在序列中的任何位置包括嵌套元組對(duì)象。但是,建議將嵌套的元組放在序列的末尾,以便可以使用Rest屬性訪問它。

var numbers = Tuple.Create(1, 2, Tuple.Create(3, 4, 5, 6, 7,  8), 9, 10, 11, 12, 13 );
numbers.Item1; // 返回 1
numbers.Item2; // 返回 2
numbers.Item3; // 返回 (3, 4, 5, 6, 7,  8)
numbers.Item3.Item1; // 返回 3
numbers.Item4; // 返回 9
numbers.Rest.Item1; //返回13

元組作為方法參數(shù)

方法可以將元組作為參數(shù)。

static void Main(string[] args)
{    var person = Tuple.Create(1, "Steve", "Jobs");
    DisplayTuple(person);
}

static void DisplayTuple(Tuple<int,string,string> person)
{
    Console.WriteLine($"Id = { person.Item1}");
    Console.WriteLine($"First Name = { person.Item2}");
    Console.WriteLine($"Last Name = { person.Item3}");
}

元組作為返回類型

元組可以從方法返回。

static void Main(string[] args)
{    var person = GetPerson();
}
static Tuple<int, string, string> GetPerson() 
{    return Tuple.Create(1, "Bill", "Gates");
}

元組的用法

元組可以在以下情況下使用:

  1. 當(dāng)您想從一個(gè)方法中返回多個(gè)值而不使用ref 或 out參數(shù)時(shí)。

  2. 當(dāng)您想通過單個(gè)參數(shù)將多個(gè)值傳遞給方法時(shí)。

  3. 當(dāng)您想暫時(shí)保存數(shù)據(jù)庫記錄或某些值而不創(chuàng)建單獨(dú)的類時(shí)。。

元組缺點(diǎn):

  1. Tuple是一個(gè)引用類型,而不是一個(gè)值類型。它在堆上分配,并可能導(dǎo)致CPU密集型操作。

  2. Tuple被限制為包括八個(gè)元素。如果需要存儲(chǔ)更多元素,則需要使用嵌套元組。但是,這可能導(dǎo)致歧義。

  3. 可以使用名稱模式 Item <elementNumber> 的屬性訪問Tuple元素,這是不太合理的。

C#7引入了ValueTuple以克服Tuple的局限性,并使使用Tuple的工作更加輕松。在下一章中了解它。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清