C# 7.0 jest dostępny od jakiegoś czasu i wszyscy wiedzą, że nowa funkcja: ValueTuple, oferuje optymalizację krotek. Oto szczegółowe przykłady wyjaśniające Podział Tuple VS ValueTuple w 10 minut, aby lepiej zrozumieć korzyści i zastosowanie ValueTuple.
Jeśli dobrze znasz się na krotkach, możesz pominąć sekcję "Przegląd krotki" i od razu przejść do sekcji "Wyjaśnienie wartości Tuple", aby zobaczyć oszałamiające wykorzystanie krotk wartościowych.
Spójrz wstecz na Tuple
Tuple to nowa funkcja, która pojawiła się wraz z C# 4.0 i jest dostępna w .Net Framework 4.0 i nowszych.
Tuple to struktura danych o określonej liczbie i sekwencji elementów. Na przykład zaprojektuj potrójną strukturę danych do przechowywania informacji o uczniu, która zawiera łącznie trzy elementy: pierwszy to nazwa, drugi wiek, a trzeci wysokość.
Szczegółowe zastosowania krotk są następujące:
1. Jak stworzyć krotkę
Domyślne. Net FrameworkKrotki obsługują tylko od 1 do 7 elementów krotkJeśli jest 8 elementów lub więcej, musisz użyć właściwości zagnieżdżania i spoczynku w Tuple, aby to zaimplementować. Ponadto klasa krotk zapewnia statyczną metodę tworzenia obiektów krotk.
Tworz krotki za pomocą konstruktorów:
Skonstruuj krotki metodą statyczną krotk, obsługując do ośmiu elementów:
Uwaga: Typ krotki skonstruowany tutaj to w rzeczywistości Tuple<int, int, int, int, <int>Tuple>, więc typ danych uzyskany przez testTuple8.Rest to Tuple<int>, więc aby uzyskać dokładną wartość, trzeba wziąć własność Item1.
2. Reprezentuje zbiór danych Stwórz krotkę poniżej, aby przedstawić trzy informacje o uczniu: imię, wiek i wzrost, bez tworzenia dodatkowej klasy osobno.
3. Zwracaj wiele wartości z metody Gdy funkcja musi zwracać wiele wartości, zazwyczaj można użyć parametru out, a zamiast out można użyć krotek, aby zwracać wiele wartości.
4. Transfer wielowartościowy dla metod jednoparametrowych
Gdy parametr funkcji jest tylko jednym typem obiektu, można przekazać wiele wartości parametrów za pomocą implementacji krotki.
Pomimo wspomnianych wcześniej przydatnych metod, krotki mają również istotne wady:
- Przy uzyskiwaniu się do elementów można uzyskać dostęp tylko przez ItemX, a przed użyciem trzeba wyjaśnić kolejność elementów, a nazwy atrybutów nie mają praktycznego znaczenia, co jest niewygodne do zapamiętania.
- Jest do ośmiu elementów, a jeśli chcesz więcej, możesz się rozbudowywać tylko przez zagnieżdżenie się z ostatnim elementem;
- Tuple to typ referencyjny, a nie typ wartości jak inne proste typy, które przydzielają miejsce na stercie i mogą wymagać zbyt dużo pracy przy tworzeniu i alokacji, gdy obciąża CPU.
W związku z tym wprowadzono nowy typ ValueTuple w C# 7.0, który zostanie opisany w kolejnych sekcjach.
ValueTuple szczegółowo wyjaśnia
ValueTuple to jedna z nowych funkcji C# 7.0, dostępna dla .Net Framework 4.7 i wyższych.
ValueTuple nie wymaga 4.7, o ile Nuget jest w porządku, 4.7 jest wbudowane. Ponadto ValueTuple to typ struktury, Microsoft zaleca unikanie struktur powyżej 64 bajtów, co jest również skuteczne dla ValueTuple.
Krotka wartości to także struktura danych używana do reprezentowania określonej liczby i ciągu elementów, ale różni się od klasy krotki i posiada następujące główne różnice:
Tuple wartości to struktura, typ wartości, a nie klasa, podczas gdy krotka to klasa, typ odniesienia; Elementy krotki wartości są zmienne, nie tylko do odczytu, co oznacza, że mogą zmieniać wartość elementu w krotkach wartościowych; Krotka wartości członków danych to pole, a nie atrybut. Specyficzne zastosowanie krotk wartościowych jest następujące:
1. Jak stworzyć krotkę wartości Podobnie jak klasy krotk, krotki wartości w .Net Framework obsługują tylko od 1 do 7 elementów krotk, a jeśli jest ich 8 lub więcej, trzeba użyć właściwości zagnieżdżonych i Rest krotki wartości, aby je zaimplementować. Ponadto klasa ValueTuple może dostarczać statyczne metody tworzenia obiektów krotk wartościowych.
Tworz krotki za pomocą konstruktorów:
Skonstruuj krotki metodą statyczną krotk, obsługując do ośmiu elementów:
Należy zauważyć, że typ krotki skonstruowany tutaj to w rzeczywistości Tuple<int, int, <int>>, więc typ danych uzyskany przez testTuple8.Rest to krotka<int>, więc aby uzyskać dokładną wartość, trzeba przyjąć właściwość Item1.
Różnica w optymalizacji:Gdy skonstruowana zostanie krotka z wartościami zawierającymi więcej niż 7 elementów, wartości w zagnieżdżonej krotki można uzyskać za pomocą następującego ItemX, a w powyższym przykładzie także uzyskać dostęp do dziesiątego elementu, albo przez testTuple10.Rest.Item3, albo testTuple10.Item10.
2. Reprezentuje zbiór danych Stwórz krotkę wartości, która przedstawia trzy informacje o uczniu: imię, wiek i wzrost, bez tworzenia dodatkowej klasy osobno.
3. Zwracaj wiele wartości z metody Krotki wartości mogą również zwracać wiele wartości zamiast parametru wyjściowego w definicji funkcji.
Różnica w optymalizacji:Wartość zwrotną można w ValueTuple określić w niewytłumaczalny sposób, używając nowej składni (,,), takiej jak (string, int, uint):
Debugowanie typu studentInfo to trójka ValueType.
Różnica w optymalizacji:Wartość zwrotna może określać nazwę elementu, aby ułatwić zrozumienie przypisania i dostępu do pamięci:
Wygodne przypisanie pamięci:
4. Transfer wielowartościowy dla metod jednoparametrowych Gdy parametr funkcji jest tylko jednym typem obiektu, można przekazać wiele wartości za pomocą implementacji krotki wartościowych.
5. Rozłóż Tuple Value Możesz użyć var (x, y) lub (var x, var y) do rozwiązywania elementów krotki i konstruowania zmiennych lokalnych, używając symbolu "_" do ignorowania niepożądanych elementów.
Jak wspomniano wyżej, ValueTuple upraszcza i ułatwia obsługę C#. Główne zalety względem krotki są następujące:
- ValueTuple obsługuje nową składnię wartości zwrotu funkcji" (,,)", co upraszcza kod;
- Należy zauważyć, że choć jest nazwana, to w rzeczywistości krotka wartości nie definiuje atrybutu ani pola takiej nazwy, to prawdziwa nazwa to nadal ItemX, a wszystkie nazwy elementów są używane tylko podczas projektowania i kompilacji, a nie w czasie działania (więc zwracaj uwagę na operacje serializacji i deserializacji tego typu);
- Niektóre lub wszystkie krotki elementów można wygodniej wykorzystać metodami niszczenia;
- Krotki wartości to typy wartości, które są bardziej efektywne w użyciu niż krotki typów odniesień, a krotki wartości mają metodę porównawczą, która pozwala porównać, czy są równe, patrz Szczegóły:https://msdn.microsoft.com/en-us/library/system.valuetuple
|