Jestem zainteresowany: czym jest analog C # std::pair
w C ++? Znalazłem System.Web.UI.Pair
zajęcia, ale wolałbym coś opartego na szablonie.
Dziękuję Ci!
c#
.net
data-structures
std-pair
base-class-library
Alexander Prokofyev
źródło
źródło
Odpowiedzi:
Krotki są dostępne od .NET4.0 i obsługują ogólne :
W poprzednich wersjach można użyć
System.Collections.Generic.KeyValuePair<K, V>
lub takie rozwiązanie:I użyj tego w ten sposób:
To daje:
Lub nawet te powiązane łańcuchowo:
To daje:
źródło
Tuple
. Dlatego możesz powiedzieć,Tuple.Create("Hello", 4)
co jest nieco łatwiejsze niżnew Tuple<string, int>("Hello", 4)
. (Nawiasem mówiąc, .NET4.0 jest już dostępny od 2010 roku.)Tuple<>
wdrażasz solidnąEquals
iGetHashCode
wartościową semantykę, co jest świetne. Pamiętaj o tym, wdrażając własne krotki.System.Web.UI
zawierałPair
klasę, ponieważ był intensywnie wykorzystywany w ASP.NET 1.1 jako wewnętrzna struktura ViewState.Aktualizacja sierpnia 2017 r .: C # 7.0 / .NET Framework 4.7 udostępnia składnię do deklarowania krotki z nazwanymi elementami przy użyciu
System.ValueTuple
struktury.zobacz MSDN, aby uzyskać więcej przykładów składni.
Aktualizacja czerwca 2012 r .:
Tuples
są częścią platformy .NET od wersji 4.0.Oto wcześniejszy artykuł opisujący włączenie w .NET4.0 i obsługę ogólnych :
źródło
tuple.Item1 = 4;
Niestety nie ma. Możesz użyć
System.Collections.Generic.KeyValuePair<K, V>
w wielu sytuacjach.Alternatywnie możesz użyć anonimowych typów do obsługi krotek, przynajmniej lokalnie:
Ostatnią alternatywą jest stworzenie własnej klasy.
źródło
C # ma krotki od wersji 4.0.
źródło
Niektóre odpowiedzi wydają się po prostu błędne,
Oto moja klasa par
Oto kod testowy:
źródło
Jeśli chodzi o słowniki i tym podobne, szukasz System.Collections.Generic.KeyValuePair <TKey, TValue>.
źródło
W zależności od tego, co chcesz osiągnąć, możesz wypróbować KeyValuePair .
Fakt, że nie można zmienić klucza wpisu, można oczywiście naprawić, po prostu zastępując cały wpis nowym wystąpieniem KeyValuePair.
źródło
Stworzyłem implementację Tuples w języku C #, która ogólnie rozwiązuje problem dla dwóch do pięciu wartości - oto post na blogu , który zawiera link do źródła.
źródło
Zadawałem to samo pytanie właśnie teraz po szybkim google. Odkryłem, że w .NET istnieje klasa par z wyjątkiem jej w System.Web.UI ^ ~ ^ (http://msdn.microsoft.com/en-us/library/system.web.ui.pair.aspx ) dobroć wie, dlaczego umieścili go tam zamiast struktury kolekcji
źródło
Od wersji .NET 4.0 masz
System.Tuple<T1, T2>
klasę:źródło
Zazwyczaj rozszerzam
Tuple
klasę na własne ogólne opakowanie w następujący sposób:i używaj go w ten sposób:
źródło
Aby powyższe zadziałało (potrzebowałem pary jako klucza słownika). Musiałem dodać:
a kiedy to zrobiłem, dodałem również
aby wyłączyć ostrzeżenie kompilatora.
źródło
Biblioteka PowerCollections (wcześniej dostępna z Wintellect, ale teraz hostowana na Codeplex @ http://powercollections.codeplex.com ) ma ogólną strukturę par.
źródło
Oprócz klasy niestandardowej lub krotek .Net 4.0, od wersji C # 7.0 pojawiła się nowa funkcja o nazwie ValueTuple, która jest strukturą, której można użyć w tym przypadku. Zamiast pisać:
i uzyskiwać dostęp do wartości poprzez
t.Item1
it.Item2
, możesz po prostu zrobić to w ten sposób:lub nawet:
źródło