Прочитать на английском

Поделиться через


Tuple<T1,T2> Класс

Определение

Представляет кортеж из двух компонентов.

public class Tuple<T1,T2> : IComparable, System.Collections.IStructuralComparable, System.Collections.IStructuralEquatable
public class Tuple<T1,T2> : IComparable, System.Collections.IStructuralComparable, System.Collections.IStructuralEquatable, System.Runtime.CompilerServices.ITuple
[System.Serializable]
public class Tuple<T1,T2> : IComparable, System.Collections.IStructuralComparable, System.Collections.IStructuralEquatable

Параметры типа

T1

Тип первого компонента кортежа.

T2

Тип второго компонента кортежа.

Наследование
Tuple<T1,T2>
Атрибуты
Реализации

Комментарии

Кортеж — это структура данных, которая имеет определенное число и последовательность значений. Класс Tuple<T1,T2> представляет собой двух кортеж или пару, которая представляет собой кортеж с двумя компонентами. 2 кортежа похож на структуру KeyValuePair<TKey,TValue> .

Вы можете создать Tuple<T1,T2> экземпляр объекта, вызвав Tuple<T1,T2> конструктор или статический Tuple.Create<T1,T2>(T1, T2) метод. Значения компонентов кортежа можно получить с помощью свойств только Item1 для чтения и Item2 экземпляра.

Кортежи обычно используются четырьмя разными способами:

  • Представление одного набора данных. Например, кортеж может представлять запись в базе данных, а его компоненты могут представлять поля этой записи.

  • Для обеспечения простого доступа к набору данных и управления ими. В следующем примере определяется массив Tuple<T1,T2> объектов, содержащих имена учащихся и соответствующие оценки тестов. Затем он выполняет итератор массива для вычисления средней оценки теста.

    using System;
    
    public class Example
    {
       public static void Main()
       {
          Tuple<string, Nullable<int>>[] scores = 
                        { new Tuple<string, Nullable<int>>("Jack", 78),
                          new Tuple<string, Nullable<int>>("Abbey", 92), 
                          new Tuple<string, Nullable<int>>("Dave", 88),
                          new Tuple<string, Nullable<int>>("Sam", 91), 
                          new Tuple<string, Nullable<int>>("Ed", null),
                          new Tuple<string, Nullable<int>>("Penelope", 82),
                          new Tuple<string, Nullable<int>>("Linda", 99),
                          new Tuple<string, Nullable<int>>("Judith", 84) };
          int number;
          double mean = ComputeMean(scores, out number);
          Console.WriteLine("Average test score: {0:N2} (n={1})", mean, number);
       }
    
       private static double ComputeMean(Tuple<string, Nullable<int>>[] scores, out int n) 
       {
          n = 0;      
          int sum = 0;
          foreach (var score in scores)
          {
             if (score.Item2.HasValue)
             { 
                n += 1;
                sum += score.Item2.Value;
             }
          }     
          if (n > 0)
             return sum / (double) n;
          else
             return 0;
       }
    }
    // The example displays the following output:
    //       Average test score: 87.71 (n=7)
    
  • Получение нескольких значений из метода без использования out параметров (в C#) или ByRef параметров (в Visual Basic). Например, в следующем примере объект используется Tuple<T1,T2> для возврата кворента и остатка, результатом чего является целочисленное деление.

    using System;
    
    public class Class1
    {
       public static void Main()
       {
          int dividend, divisor;
          Tuple<int, int> result;
          
          dividend = 136945; divisor = 178;
          result = IntegerDivide(dividend, divisor);
          if (result != null)
             Console.WriteLine(@"{0} \ {1} = {2}, remainder {3}", 
                               dividend, divisor, result.Item1, result.Item2);
          else
             Console.WriteLine(@"{0} \ {1} = <Error>", dividend, divisor);
                            
          dividend = Int32.MaxValue; divisor = -2073;
          result = IntegerDivide(dividend, divisor);
          if (result != null)
             Console.WriteLine(@"{0} \ {1} = {2}, remainder {3}", 
                               dividend, divisor, result.Item1, result.Item2);
          else
             Console.WriteLine(@"{0} \ {1} = <Error>", dividend, divisor);
       }
    
       private static Tuple<int, int> IntegerDivide(int dividend, int divisor)
       {
          try {
             int remainder;
             int quotient = Math.DivRem(dividend, divisor, out remainder);
             return new Tuple<int, int>(quotient, remainder);
          }   
          catch (DivideByZeroException) {
             return null;
          }      
       }
    }
    // The example displays the following output:
    //       136945 \ 178 = 769, remainder 63
    //       2147483647 \ -2073 = -1035930, remainder 757
    
  • Передача нескольких значений методу через один параметр. Например, метод Thread.Start(Object) имеет один параметр, который позволяет указать одно значение методу, который выполняется потоком при запуске. Если вы предоставляете объект в Tuple<T1,T2> качестве аргумента метода, можно указать подпрограмму запуска потока двумя элементами данных.

Конструкторы

Tuple<T1,T2>(T1, T2)

Инициализирует новый экземпляр класса Tuple<T1,T2>.

Свойства

Item1

Получает значение первого компонента текущего объекта Tuple<T1,T2>.

Item2

Получает значение второго компонента текущего объекта Tuple<T1,T2>.

Методы

Equals(Object)

Возвращает значение, показывающее, равен ли текущий объект Tuple<T1,T2> указанному объекту.

GetHashCode()

Возвращает хэш-код для текущего объекта Tuple<T1,T2>.

GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
ToString()

Возвращает строковое представление значения этого экземпляра Tuple<T1,T2>.

Явные реализации интерфейса

IComparable.CompareTo(Object)

Сравнивает текущий объект Tuple<T1,T2> с заданным объектом и возвращает целое число, указывающее, находится ли текущий объект в той же позиции, что и указанный объект, после него или перед ним в порядке сортировки.

IStructuralComparable.CompareTo(Object, IComparer)

Сравнивает текущий объект Tuple<T1,T2> с указанным объектом, используя заданный компаратор, и возвращает целое число, которое показывает положение текущего объекта относительно указанного объекта в порядке сортировки: перед объектом, после него или в той же позиции.

IStructuralEquatable.Equals(Object, IEqualityComparer)

Возвращает значение, показывающее, равен ли текущий атрибут Tuple<T1,T2> указанному объекту при использовании заданного метода сравнения.

IStructuralEquatable.GetHashCode(IEqualityComparer)

Вычисляет хэш-код для текущего объекта Tuple<T1,T2>, используя заданный метод вычисления.

ITuple.Item[Int32]

Получает значение указанного элемента Tuple.

ITuple.Length

Возвращает количество элементов в Tuple.

Методы расширения

Deconstruct<T1,T2>(Tuple<T1,T2>, T1, T2)

Разбивает кортеж с 2 элементами на отдельные переменные.

ToValueTuple<T1,T2>(Tuple<T1,T2>)

Преобразует экземпляр класса Tuple в экземпляр структуры ValueTuple.

Применяется к

См. также раздел