Поиск…


Создание кортежей

Кортежи создаются с использованием общих типов Tuple<T1> - Tuple<T1,T2,T3,T4,T5,T6,T7,T8> . Каждый из типов представляет собой кортеж, содержащий от 1 до 8 элементов. Элементы могут быть разных типов.

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

Кортежи также могут быть созданы с использованием статических методов Tuple.Create . В этом случае типы элементов выводятся компилятором C #.

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

Начиная с C # 7.0, Tuples можно легко создать с помощью ValueTuple .

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

Элементы можно назвать проще для разложения.

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

Доступ к элементам кортежа

Для доступа кортежей элементы используют Item1 - Item8 свойства. Будут доступны только свойства с номером индекса, меньшим или равным размеру кортежа (т. Item3 Нельзя получить доступ к свойству Item3 в 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()

Сравнение и сортировка кортежей

Кортежи можно сравнивать по их элементам.

В качестве примера, перечисляемый, чьи элементы имеют тип Tuple может быть отсортирован на основе операторов сравнения, определенных на указанном элементе:

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)

Или изменить порядок сортировки:

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

Возвращать несколько значений из метода

Кортежи могут использоваться для возврата нескольких значений из метода без использования параметров. В следующем примере AddMultiply используется для возврата двух значений (sum, product).

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);
}

Выход:

53
700

Теперь C # 7.0 предлагает альтернативный способ возврата нескольких значений из методов с использованием кортежей значений. Дополнительная информация о ValueTuple struct .



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow