HOWTO · Csharp

在 C# 中初始化元組列表

本文探討在 C# 中高效初始化元組列表的幾種方法。

本頁內容

在 C# 中初始化元組列表時,可選擇使用 List<Tuple<int, string>> 儲存參考元組,或使用 List<(int, string)> 儲存值元組。你可以透過集合初始設定式建立項目、使用 Add() 逐一加入,或以 LINQ 將現有序列投影成元組。這兩種元組型別並不相同,請依照程式其他部分使用的型別選擇。

在 C# 中使用 Tuple.Create() 方法初始化元組列表

Tuple.Create() 會建立參考元組。使用集合初始設定式,可以在宣告 List<Tuple<int, string>> 時一次建立多個項目:

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var tupleList = new List<Tuple<int, string>>
        {
            Tuple.Create(1, "Apple"),
            Tuple.Create(2, "Banana"),
            Tuple.Create(3, "Cherry")
        };

        foreach (var tuple in tupleList)
        {
            Console.WriteLine(tuple);
        }
    }
}

泛型清單型別會記錄元組元素的型別:先是 int,接著是 string。Tuple.Create() 會從每組值推斷這些型別,而迴圈會依照項目的加入順序逐一走訪。請參閱 Tuple.Create() 方法文件,了解它提供的多載。

在 C# 中使用 () 表示法初始化元組列表

清單也可以包含以 () 表示法撰寫的值元組。以下範例使用 List<(int, string)>,並直接初始化三個項目:

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var tupleList = new List<(int, string)>
        {
            (1, "Apple"),
            (2, "Banana"),
            (3, "Cherry")
        };

        foreach (var tuple in tupleList)
        {
            Console.WriteLine(tuple);
        }
    }
}

此處的 (int, string) 是值元組的元素型別,而每一組括號中的值都會提供一個清單項目。同一組值也可以用不同的清單元素型別表示。請參閱 C# 中的值元組,了解更多資訊。

在 C# 中使用 List<Tuple<T1, T2>> 和 Add() 初始化元組列表

如果項目會陸續產生,或清單是透過應用程式邏輯組成,便可使用 Add()。先建立空清單,再逐一加入參考元組:

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var tupleList = new List<Tuple<int, string>>();

        tupleList.Add(Tuple.Create(1, "Apple"));
        tupleList.Add(Tuple.Create(2, "Banana"));
        tupleList.Add(Tuple.Create(3, "Cherry"));

        foreach (var tuple in tupleList)
        {
            Console.WriteLine(tuple);
        }
    }
}

清單宣告的型別會決定它儲存哪一種元組。每次呼叫 Add() 都會加入一個 Tuple<int, string>;Tuple.Create() 則會使用提供的值建立該參考元組。

在 C# 中使用 LINQ 初始化元組列表

當元組項目來自現有序列時,LINQ 就很實用。Select() 會將每個數字投影成元組,而 ToList() 會將投影後的序列具體化為清單:

using System;
using System.Linq;

class Program
{
    static void Main()
    {
        var tupleList = Enumerable.Range(1, 3)
            .Select(i => Tuple.Create(i, $"Fruit{i}"))
            .ToList();

        foreach (var tuple in tupleList)
        {
            Console.WriteLine(tuple);
        }
    }
}

Enumerable.Range(1, 3) 會提供 1、2 和 3。投影會將每個數字與一個字串配對,而 ToList() 會傳回 List<Tuple<int, string>>。由於投影使用 Tuple.Create(),這些都是參考元組。

結論

若值是固定的,使用 Tuple.Create() 或值元組常值搭配集合初始設定式,寫法都很精簡。若要逐步建立 List<Tuple<T1, T2>>,請使用 Add();若要將現有序列轉成元組項目,則可使用 LINQ。參考元組 (Tuple<T1, T2>) 和值元組 ((T1, T2)) 是不同型別;請讓所選型別與程式使用的 API 和資料保持一致。