Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 24117|Odpowiedź: 1

[Źródło] Szczegółowe wyjaśnienie krotki C# VS Wartości

[Skopiuj link]
Opublikowano 14.05.2018 16:37:48 | | | |
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






Poprzedni:Narzędzia popularyzacji nauki dla architektur na dużą skalę
Następny:HUAWEI CLOUD publikuje Białą Księgę Blockchain, aby przyspieszyć wdrażanie branży technologii blockchain
Opublikowano 15.05.2018 11:41:00 |
Zgadzam się!
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com