Ich bin interessiert: Wovon ist C # std::pair
in C ++ analog ? Ich habe System.Web.UI.Pair
Klasse gefunden , aber ich würde etwas vorlagenbasiertes bevorzugen.
Danke dir!
c#
.net
data-structures
std-pair
base-class-library
Alexander Prokofyev
quelle
quelle
Antworten:
Tupel sind seit .NET4.0 verfügbar und unterstützen Generika:
In früheren Versionen können Sie
System.Collections.Generic.KeyValuePair<K, V>
eine Lösung wie die folgende verwenden:Und benutze es so:
Dies gibt aus:
Oder sogar diese verketteten Paare:
Das gibt aus:
quelle
Tuple
. Daher kann man sagen,Tuple.Create("Hello", 4)
was etwas einfacher ist alsnew Tuple<string, int>("Hello", 4)
. (Übrigens ist .NET4.0 bereits seit 2010 hier.)Tuple<>
implementiert solideEquals
undGetHashCode
mit Wertesemantik, was großartig ist. Denken Sie daran, wenn Sie Ihre eigenen Tupel implementieren.System.Web.UI
enthielt diePair
Klasse, da sie in ASP.NET 1.1 häufig als interne ViewState-Struktur verwendet wurde.Update August 2017: C # 7.0 / .NET Framework 4.7 bietet eine Syntax zum Deklarieren eines Tupels mit benannten Elementen mithilfe der
System.ValueTuple
Struktur.Weitere Syntaxbeispiele finden Sie unter MSDN .
Update Jun 2012:
Tuples
Seit Version 4.0 Teil von .NET.Hier ist ein früherer Artikel, der die Aufnahme in.NET4.0 und die Unterstützung von Generika beschreibt:
quelle
tuple.Item1 = 4;
Leider gibt es keine. Sie können das
System.Collections.Generic.KeyValuePair<K, V>
in vielen Situationen verwenden.Alternativ können Sie anonyme Typen verwenden, um Tupel zumindest lokal zu verarbeiten:
Die letzte Alternative besteht darin, eine eigene Klasse zu erstellen.
quelle
C # hat Tupel ab Version 4.0.
quelle
Einige Antworten scheinen einfach falsch zu sein,
Hier ist meine Paarklasse
Hier ist ein Testcode:
quelle
Wenn es um Wörterbücher und dergleichen geht, suchen Sie nach System.Collections.Generic.KeyValuePair <TKey, TValue>.
quelle
Je nachdem , was Sie erreichen möchten, können Sie ausprobieren KeyValuePair .
Die Tatsache, dass Sie den Schlüssel eines Eintrags nicht ändern können, kann natürlich korrigiert werden, indem einfach der gesamte Eintrag durch eine neue Instanz von KeyValuePair ersetzt wird.
quelle
Ich habe eine C # -Implementierung von Tuples erstellt, die das Problem generisch für zwei bis fünf Werte löst. Hier ist der Blog-Beitrag , der einen Link zur Quelle enthält.
quelle
Ich habe die gleiche Frage gerade nach einer kurzen Google-Suche gestellt. Ich habe festgestellt, dass es in .NET eine Paarklasse gibt, außer in der System.Web.UI ^ ~ ^ (http://msdn.microsoft.com/en-us/library/system.web.ui.pair.aspx ) Meine Güte weiß, warum sie es dort anstelle des Sammlungsframeworks ablegen
quelle
Seit .NET 4.0 haben Sie
System.Tuple<T1, T2>
Klasse:quelle
Normalerweise erweitere ich die
Tuple
Klasse wie folgt in meinen eigenen generischen Wrapper:und benutze es so:
quelle
Damit das oben genannte funktioniert (ich brauchte ein Paar als Schlüssel für ein Wörterbuch). Ich musste hinzufügen:
und als ich das getan habe, habe ich auch hinzugefügt
um eine Compilerwarnung zu unterdrücken.
quelle
Die PowerCollections-Bibliothek (früher bei Wintellect erhältlich, jetzt jedoch auf Codeplex @ http://powercollections.codeplex.com gehostet ) verfügt über eine generische Paarstruktur .
quelle
Abgesehen von benutzerdefinierten Klassen- oder .NET 4.0-Tupeln gibt es seit C # 7.0 eine neue Funktion namens ValueTuple, eine Struktur, die in diesem Fall verwendet werden kann. Anstatt zu schreiben:
und Zugriff auf Werte durch
t.Item1
undt.Item2
, Sie können es einfach so machen:oder auch:
quelle