C# Language
Кортеж
Поиск…
Создание кортежей
Кортежи создаются с использованием общих типов 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());
Начиная с 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 .