Szukaj…


Tworzenie krotek

Krotki są tworzone przy użyciu typów ogólnych Tuple<T1> - Tuple<T1,T2,T3,T4,T5,T6,T7,T8> . Każdy z typów reprezentuje krotkę zawierającą od 1 do 8 elementów. Elementy mogą być różnych typów.

// tuple with 4 elements
var tuple = new Tuple<string, int, bool, MyClass>("foo", 123, true, new MyClass());

Krotki można również tworzyć przy użyciu statycznych metod Tuple.Create . W takim przypadku typy elementów są wywnioskowane przez kompilator C #.

// tuple with 4 elements
var tuple = Tuple.Create("foo", 123, true, new MyClass());
7.0

Od wersji C # 7.0 Tuple można łatwo tworzyć za pomocą ValueTuple .

var tuple = ("foo", 123, true, new MyClass());

Elementy można nazwać w celu łatwiejszego rozkładu.

(int number, bool flag, MyClass instance) tuple = (123, true, new MyClass());

Dostęp do elementów krotkowych

Aby uzyskać dostęp do elementów krotkowe używać Item1 - Item8 właściwości. Item3 dostępne tylko właściwości o numerze indeksu mniejszym lub równym krotce (tzn. Nie można uzyskać dostępu do właściwości Tuple<T1,T2> w Tuple<T1,T2> ).

var tuple = new Tuple<string, int, bool, MyClass>("foo", 123, true, new MyClass());
var item1 = tuple.Item1; // "foo"
var item2 = tuple.Item2; // 123
var item3 = tuple.Item3; // true
var item4 = tuple.Item4; // new My Class()

Porównywanie i sortowanie krotek

Krotki można porównać na podstawie ich elementów.

Na przykład, Tuple którego elementy są typu Tuple można sortować na podstawie operatorów porównań zdefiniowanych na określonym elemencie:

List<Tuple<int, string>> list = new List<Tuple<int, string>>();
list.Add(new Tuple<int, string>(2, "foo"));
list.Add(new Tuple<int, string>(1, "bar"));
list.Add(new Tuple<int, string>(3, "qux"));

list.Sort((a, b) => a.Item2.CompareTo(b.Item2)); //sort based on the string element

foreach (var element in list) {
    Console.WriteLine(element);
}

// Output:
// (1, bar)
// (2, foo)
// (3, qux)

Lub odwróć sortowanie:

list.Sort((a, b) => b.Item2.CompareTo(a.Item2));

Zwróć wiele wartości z metody

Krotki mogą być używane do zwracania wielu wartości z metody bez użycia parametrów out. W poniższym przykładzie AddMultiply jest używany do zwrócenia dwóch wartości (suma, produkt).

void Write()
{
    var result = AddMultiply(25, 28);
    Console.WriteLine(result.Item1);
    Console.WriteLine(result.Item2);
}

Tuple<int, int> AddMultiply(int a, int b)
{
    return new Tuple<int, int>(a + b, a * b);
}

Wynik:

53
700

Teraz C # 7.0 oferuje alternatywny sposób zwracania wielu wartości z metod przy użyciu krotek wartości Więcej informacji o strukturze ValueTuple .



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow