Je suis intéressé: Quel est l'analogue de C # std::pair
en C ++? J'ai trouvé la System.Web.UI.Pair
classe, mais je préfère quelque chose basé sur un modèle.
Je vous remercie!
c#
.net
data-structures
std-pair
base-class-library
Alexander Prokofyev
la source
la source
Réponses:
Les tuples sont disponibles depuis .NET4.0 et prennent en charge les génériques:
Dans les versions précédentes, vous pouvez utiliser
System.Collections.Generic.KeyValuePair<K, V>
une solution comme celle-ci:Et utilisez-le comme ceci:
Cela produit:
Ou même ces paires enchaînées:
Cela génère:
la source
Tuple
. Par conséquent, vous pouvez direTuple.Create("Hello", 4)
ce qui est un peu plus facile quenew Tuple<string, int>("Hello", 4)
. (Au fait, .NET4.0 est déjà là depuis 2010.)Tuple<>
implémentez une sémantique solideEquals
etGetHashCode
de valeur, ce qui est génial. Gardez à l'esprit lorsque vous implémentez vos propres tuples.System.Web.UI
contenait laPair
classe car elle était largement utilisée dans ASP.NET 1.1 en tant que structure ViewState interne.Mise à jour d'août 2017: C # 7.0 / .NET Framework 4.7 fournit une syntaxe pour déclarer un tuple avec des éléments nommés à l'aide de la
System.ValueTuple
structure.voir MSDN pour plus d'exemples de syntaxe.
Mise à jour de juin 2012:
Tuples
fait partie de .NET depuis la version 4.0.Voici un article antérieur décrivant l'inclusion dans.NET4.0 et la prise en charge des génériques:
la source
tuple.Item1 = 4;
Malheureusement, il n'y en a pas. Vous pouvez utiliser le
System.Collections.Generic.KeyValuePair<K, V>
dans de nombreuses situations.Alternativement, vous pouvez utiliser des types anonymes pour gérer les tuples, au moins localement:
La dernière alternative consiste à créer une propre classe.
la source
C # a des tuples à partir de la version 4.0.
la source
Certaines réponses semblent fausses,
Voici ma classe de paire
Voici un code de test:
la source
S'il s'agit de dictionnaires et similaires, vous recherchez System.Collections.Generic.KeyValuePair <TKey, TValue>.
la source
Selon ce que vous souhaitez accomplir, vous pouvez essayer KeyValuePair .
Le fait que vous ne pouvez pas modifier la clé d'une entrée peut bien sûr être corrigé en remplaçant simplement l'entrée entière par une nouvelle instance de KeyValuePair.
la source
J'ai créé une implémentation C # de Tuples, qui résout le problème de manière générique entre deux et cinq valeurs - voici le billet de blog , qui contient un lien vers la source.
la source
Je posais la même question tout à l'heure après un rapide google, j'ai trouvé qu'il y a une classe de paires dans .NET, sauf dans System.Web.UI ^ ~ ^ (http://msdn.microsoft.com/en-us/library/system.web.ui.pair.aspx ) Dieu sait pourquoi ils l'ont mis là au lieu du cadre des collections
la source
Depuis .NET 4.0, vous avez une
System.Tuple<T1, T2>
classe:la source
J'étends généralement la
Tuple
classe dans mon propre wrapper générique comme suit:et l'utiliser comme ça:
la source
Afin de faire fonctionner ce qui précède (j'avais besoin d'une paire comme clé d'un dictionnaire). J'ai dû ajouter:
et une fois que j'ai fait ça, j'ai aussi ajouté
pour supprimer un avertissement du compilateur.
la source
La bibliothèque PowerCollections (auparavant disponible chez Wintellect mais maintenant hébergée sur Codeplex @ http://powercollections.codeplex.com ) a une structure de paire générique.
la source
Outre la classe personnalisée ou les tuples .Net 4.0, depuis C # 7.0, il existe une nouvelle fonctionnalité appelée ValueTuple, qui est une structure qui peut être utilisée dans ce cas. Au lieu d'écrire:
et accéder aux valeurs via
t.Item1
ett.Item2
, vous pouvez simplement le faire comme ça:ou même:
la source