Estou interessado: De que é o análogo do C # std::pair
em C ++? Encontrei System.Web.UI.Pair
classe, mas prefiro algo baseado em modelo.
Obrigado!
c#
.net
data-structures
std-pair
base-class-library
Alexander Prokofyev
fonte
fonte
Respostas:
As tuplas estão disponíveis desde o .NET4.0 e os genéricos de suporte:
Nas versões anteriores, você pode usar
System.Collections.Generic.KeyValuePair<K, V>
ou uma solução como a seguinte:E use-o assim:
Isso gera:
Ou mesmo esses pares encadeados:
Isso gera:
fonte
Tuple
. Portanto, você pode dizer oTuple.Create("Hello", 4)
que é um pouco mais fácil do quenew Tuple<string, int>("Hello", 4)
. (By the way, .NET4.0 já está aqui desde 2010.)Tuple<>
implementa uma sólidaEquals
eGetHashCode
semântica de valores, o que é ótimo. Lembre-se de implementar suas próprias tuplas.System.Web.UI
continha aPair
classe porque era muito usada no ASP.NET 1.1 como uma estrutura interna do ViewState.Atualização em agosto de 2017: O C # 7.0 / .NET Framework 4.7 fornece uma sintaxe para declarar uma Tupla com itens nomeados usando a
System.ValueTuple
estrutura.consulte MSDN para mais exemplos de sintaxe.
Atualização de junho de 2012:
Tuples
parte do .NET desde a versão 4.0.Aqui está um artigo anterior que descreve a inclusão no.NET4.0 e o suporte a genéricos:
fonte
tuple.Item1 = 4;
Infelizmente, não há. Você pode usar o
System.Collections.Generic.KeyValuePair<K, V>
em muitas situações.Como alternativa, você pode usar tipos anônimos para manipular tuplas, pelo menos localmente:
A última alternativa é criar uma própria classe.
fonte
C # possui tuplas na versão 4.0.
fonte
Algumas respostas parecem erradas,
Aqui está a minha aula de par
Aqui está um código de teste:
fonte
Se é sobre dicionários e coisas do gênero, você está procurando System.Collections.Generic.KeyValuePair <TKey, TValue>.
fonte
Dependendo do que você deseja realizar, você pode experimentar o KeyValuePair .
É claro que o fato de você não poder alterar a chave de uma entrada pode ser corrigido simplesmente substituindo a entrada inteira por uma nova instância do KeyValuePair.
fonte
Criei uma implementação em C # das Tuplas, que resolve o problema genericamente entre dois e cinco valores - aqui está a postagem do blog , que contém um link para a fonte.
fonte
Eu estava fazendo a mesma pergunta agora, depois de um rápido google, descobri que existe uma classe de pares no .NET, exceto a que está no System.Web.UI ^ ~ ^ (http://msdn.microsoft.com/en-us/library/system.web.ui.pair.aspx ) Deus sabe por que eles colocaram lá em vez da estrutura de coleções
fonte
Desde o .NET 4.0 você tem
System.Tuple<T1, T2>
classe:fonte
Normalmente, estendo a
Tuple
classe para meu próprio invólucro genérico da seguinte maneira:e use-o assim:
fonte
Para que o procedimento acima funcione (eu precisava de um par como chave de um dicionário). Eu tive que adicionar:
e uma vez que eu fiz isso também adicionei
suprimir um aviso do compilador.
fonte
A biblioteca do PowerCollections (anteriormente disponível na Wintellect, mas agora hospedada no Codeplex @ http://powercollections.codeplex.com ) possui uma estrutura de pares genérica.
fonte
Além da classe personalizada ou das tuplas .Net 4.0, desde o C # 7.0, há um novo recurso chamado ValueTuple, que é uma estrutura que pode ser usada nesse caso. Em vez de escrever:
e acessar valores por meio de
t.Item1
et.Item2
, você pode simplesmente fazer o seguinte:ou até:
fonte