Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 24117|Risposta: 1

[Fonte] Spiegazione dettagliata di C# Tuple VS ValueTuple

[Copiato link]
Pubblicato su 14/05/2018 16:37:48 | | | |
C# 7.0 è disponibile da un po' di tempo, e tutti sanno che esiste un'ottimizzazione per le tuple nella nuova funzione: ValueTuple. Ecco esempi dettagliati per spiegare Tuple VS ValueTuple in 10 minuti, per comprendere meglio i benefici e l'uso di ValueTuple.

Se conosci abbastanza Tuple, puoi saltare la sezione "Recensione Tuple" e andare direttamente alla sezione "ValueTuple Spiegato" per vedere l'abbagliante utilizzo delle tuple value.



Guarda indietro a Tuple

Tuple è una nuova funzionalità uscita con C# 4.0 ed è disponibile in .Net Framework 4.0 e versioni successive.

Una tupla è una struttura dati con un numero e una sequenza specifici di elementi. Ad esempio, progetta una struttura dati tripla per memorizzare le informazioni degli studenti, che contiene un totale di tre elementi: il primo è il nome, il secondo l'età e il terzo l'altezza.

Gli usi specifici delle tuple sono i seguenti:

1. Come creare una tupla

Predefinito. Net FrameworkLe tuple supportano solo da 1 a 7 elementi di tuplaSe ci sono 8 elementi o più, devi usare le proprietà di annidamento e Rest di Tuple per implementarla. Inoltre, la classe Tuple fornisce un metodo statico per creare oggetti tuple.

Crea tuple usando costruttori:

Costruire le tuple usando il metodo statico delle tuple, supportando fino a otto elementi:
Nota: Il tipo di Tuple costruito qui è in realtà Tuple<int, int, int, int, Tuple<int>>, quindi il tipo di dato ottenuto da testTuple8.Rest è Tuple<int>, quindi per ottenere il valore esatto devi prendere la proprietà Item1.

2. Rappresenta un insieme di dati
Crea una tupla qui sotto per rappresentare tre informazioni su uno studente: nome, età e altezza, senza creare una classe aggiuntiva separatamente.

3. Restituire più valori da un metodo
Quando una funzione deve restituire più valori, generalmente si può usare il parametro out, e si possono usare tuple invece di out per restituire più valori.
4. Trasferimento multivalore per metodi a parametro singolo

Quando il parametro della funzione è un solo tipo di Oggetto, più valori di parametro possono essere passati utilizzando l'implementazione della tupla.

Nonostante i metodi pratici sopra menzionati, le tuple presentano anche carenze significative:

  • Quando si accedono agli elementi, si può accedere solo tramite ItemX, e bisogna chiarire l'ordine degli elementi prima dell'uso, e i nomi degli attributi non hanno un significato pratico, il che è scomodo da ricordare.
  • Ci sono fino a otto elementi, e se ne vuoi di più, puoi espandere solo annidando con l'ultimo elemento;
  • La tupla è un tipo di riferimento, non un tipo di valore come altri tipi semplici, che alloca spazio sull'heap e può richiedere troppo lavoro di creazione e allocazione quando è molto intensivo per la CPU.


Pertanto, è stato introdotto un nuovo tipo ValueTuple in C# 7.0, dettagliato nelle sezioni seguenti.

ValueTuple spiega in dettaglio

ValueTuple è una delle nuove funzionalità di C# 7.0, disponibile per .Net Framework 4.7 e superiori.

ValueTuple non richiede 4.7, finché Nuget va bene, 4.7 è integrato.
Inoltre, ValueTuple è un tipo di struttura, Microsoft consiglia di non usare strutture superiori a 64 byte, cosa efficace anche per ValueTuple.


Una tupla di valore è anche una struttura dati utilizzata per rappresentare un numero e una sequenza specifici di elementi, ma è diversa da una classe di tuple, con le seguenti principali differenze:

Una tupla valore è una struttura, un tipo di valore, non una classe, mentre una tupla è una classe, un tipo di riferimento;
Gli elementi della tupla di valore sono variabili, non di sola lettura, cioè possono modificare il valore dell'elemento nella tupla;
Un tuple di valore dei membri dei dati è un campo, non un attributo.
L'uso specifico delle tuple di valore è il seguente:

1. Come creare una tupla di valore
Come le classi di tuple, le tuple value del .Net Framework supportano solo da 1 a 7 elementi della tuple, e se ci sono 8 o più elementi, devi usare le proprietà annidate e Rest della tupla valore per implementarla. Inoltre, la classe ValueTuple può fornire metodi statici per creare oggetti tuple di valore.

Crea tuple usando costruttori:

Costruire le tuple usando il metodo statico delle tuple, supportando fino a otto elementi:
Nota che il tipo di Tuple costruito qui è in realtà Tuple<int, int, <int>>, quindi il tipo di dato ottenuto da testTuple8.Rest è Tuple<int>, quindi per ottenere il valore accurato devi prendere la proprietà Item1.

Differenza di ottimizzazione:Quando viene costruita una tupla di valori con più di 7 elementi, i valori nella tupla annidata possono essere accessibili usando il seguente ItemX e, per l'esempio sopra, per accedere al decimo elemento, tramite testTuple10.Rest.Item3 o testTuple10.Item10.
2. Rappresenta un insieme di dati
Crea una tupla di valori che rappresenti tre informazioni su uno studente: nome, età e altezza senza creare una classe aggiuntiva separatamente.
3. Restituire più valori da un metodo
Le tuple di valori possono anche restituire più valori al posto del parametro out nella definizione della funzione.
Differenza di ottimizzazione:Il valore di ritorno può essere specificato nel ValueTuple in modo inspiegabile, usando invece una nuova sintassi (,,), come (stringa, int, uint):
Il debug del tipo di studentInfo è il triplo ValueType.

Differenza di ottimizzazione:Il valore di ritorno può specificare il nome dell'elemento per facilitare la comprensione dell'assegnazione e dell'accesso alla memoria:

Assegnazione comoda della memoria:



4. Trasferimento multivalore per metodi a parametro singolo
Quando un parametro di funzione è composto da un solo tipo di Oggetto, più valori possono essere passati utilizzando l'implementazione della tupla di valori.
5. Decostruzione del valore
Puoi usare var (x, y) o (var x, var y) per risolvere elementi di tupla e costruire variabili locali, usando il simbolo "_" per ignorare gli elementi indesiderati.
Come detto sopra, ValueTuple rende C# più semplice e facile da usare. I principali vantaggi rispetto al Tuple sono i seguenti:

  • ValueTuple supporta una nuova sintassi per i valori di ritorno delle funzioni" (,,)", rendendo il codice più semplice;
  • Va notato qui, sebbene sia nominato, in realtà il valore tupla non definisce l'attributo o il campo di tale nome, il nome reale è comunque ItemX, e tutti i nomi degli elementi sono usati solo durante la progettazione e la compilazione, non durante l'esecuzione (quindi prestare attenzione alle operazioni di serializzazione e deerializzazione di questo tipo);
  • Alcune o tutte le tuple di elementi possono essere usate più comodamente usando metodi di distruzione;
  • Le tuple valori sono tipi di valore, che sono più efficienti da utilizzare rispetto alle tuple di tipo di riferimento, e le tuple valori hanno un metodo di confronto che può essere utilizzato per confrontare se sono uguali, vedi Dettagli:https://msdn.microsoft.com/en-us/library/system.valuetuple






Precedente:Strumenti di divulgazione scientifica per architetture su larga scala
Prossimo:HUAWEI CLOUD pubblica un White Paper sulla Blockchain per Accelerare l'Implementazione dell'Industria della Tecnologia Blockchain
Pubblicato su 15/05/2018 11:41:00 |
Sono d'accordo!
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com