Ler em inglês

Compartilhar via


Tuple<T1,T2> Classe

Definição

Representa uma tupla de 2 ou par.

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

Parâmetros de tipo

T1

O tipo do primeiro componente da tupla.

T2

O tipo do segundo componente da tupla.

Herança
Tuple<T1,T2>
Atributos
Implementações

Comentários

Tupla é uma estrutura de dados que possui um número específico e uma sequência de valores. A Tuple<T1,T2> classe representa uma tupla de 2 ou um par, que é uma tupla que tem dois componentes. Uma tupla 2 é semelhante a uma KeyValuePair<TKey,TValue> estrutura.

Você pode criar uma instância de um Tuple<T1,T2> objeto chamando o Tuple<T1,T2> construtor ou o método estático Tuple.Create<T1,T2>(T1, T2) . Você pode recuperar os valores dos componentes da tupla usando as propriedades somente Item1 leitura e Item2 instância.

As tuplas costumam ser usadas de quatro maneiras diferentes:

  • Para representar um único conjunto de dados. Por exemplo, uma tupla pode representar um registro em um banco de dados e seus componentes podem representar os campos desse registro.

  • Para fornecer acesso fácil a, e a manipulação de um conjunto de dados. O exemplo a seguir define uma matriz de Tuple<T1,T2> objetos que contêm os nomes dos alunos e suas pontuações de teste correspondentes. Em seguida, itera a matriz para calcular a pontuação média do teste.

    C#
    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)
    
  • Para retornar vários valores de um método sem o uso de parâmetros out (no C#) ou de parâmetros ByRef (no Visual Basic). Por exemplo, o exemplo a seguir usa um Tuple<T1,T2> objeto para retornar o quociente e o restante resultante da divisão de inteiros.

    C#
    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
    
  • Para passar vários valores para um método por meio de um parâmetro único. Por exemplo, o método Thread.Start(Object) tem um único parâmetro que permite fornecer um valor ao método que o thread executa na inicialização. Se você fornecer um Tuple<T1,T2> objeto como o argumento do método, poderá fornecer a rotina de inicialização do thread com dois itens de dados.

Construtores

Tuple<T1,T2>(T1, T2)

Inicializa uma nova instância da classe Tuple<T1,T2>.

Propriedades

Item1

Obtém o valor do primeiro componente do objeto Tuple<T1,T2> atual.

Item2

Obtém o valor do segundo componente do objeto Tuple<T1,T2> atual.

Métodos

Equals(Object)

Retorna um valor que indica se o objeto Tuple<T1,T2> atual é igual a um objeto especificado.

GetHashCode()

Retorna o código hash para o objeto Tuple<T1,T2> atual.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o valor desta instância Tuple<T1,T2>.

Implantações explícitas de interface

IComparable.CompareTo(Object)

Compara o objeto Tuple<T1,T2> atual a um objeto especificado e retorna um inteiro que indica se o objeto atual está antes, depois ou na mesma posição que o objeto especificado na ordem de classificação.

IStructuralComparable.CompareTo(Object, IComparer)

Compara o objeto Tuple<T1,T2> atual com um objeto especificado usando um comparador especificado e retorna um inteiro que indica se o objeto atual está antes, depois ou na mesma posição do objeto especificado na ordem de classificação.

IStructuralEquatable.Equals(Object, IEqualityComparer)

Retorna um valor que indica se o objeto Tuple<T1,T2> atual é igual ao objeto especificado com base em um determinado método de comparação.

IStructuralEquatable.GetHashCode(IEqualityComparer)

Calcula o código hash para o objeto Tuple<T1,T2> atual usando um método de computação especificado.

ITuple.Item[Int32]

Obtém o valor do elemento Tuple especificado.

ITuple.Length

Obtém o número de elementos no Tuple.

Métodos de Extensão

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

Desconstrói uma tupla com dois elementos em variáveis separadas.

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

Converte uma instância da classe Tuple em uma instância da estrutura ValueTuple.

Aplica-se a

Produto Versões
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Confira também