C# 7.0 est sorti depuis un moment, et tout le monde sait qu’il existe une optimisation pour les tuples dans la nouvelle fonctionnalité : ValueTuple. Voici des exemples détaillés pour expliquer Tuple VS ValueTuple en 10 minutes afin de mieux comprendre les avantages et l’utilisation de ValueTuple.
Si vous connaissez suffisamment les Tuples, vous pouvez passer la section « Examiner les Tuples » et aller directement à la section « ValueTuple Explained » pour voir l’utilisation éblouissante des tuples value.
Regardez en arrière sur Tuple
Tuple est une nouvelle fonctionnalité sortie avec C# 4.0 et disponible en .Net Framework 4.0 et versions ultérieures.
Un tuple est une structure de données avec un nombre et une séquence spécifiques d’éléments. Par exemple, concevez une structure de données triple pour stocker les informations des élèves, qui contient un total de trois éléments : le premier est le nom, le second l’âge, et le troisième la taille.
Les usages spécifiques des tuples sont les suivants :
1. Comment créer un tuple
Par défaut. Cadre du NetLes tuples ne supportent que 1 à 7 éléments de tuplesS’il y a 8 éléments ou plus, il faut utiliser les propriétés de nesting et Rest de Tuple pour l’implémenter. De plus, la classe Tuple fournit une méthode statique pour créer des objets tuples.
Créez des tuples à l’aide de constructeurs :
Construisons des tuples en utilisant la méthode statique des tuples, supportant jusqu’à huit éléments :
Note : Le type de Tuple construit ici est en réalité Tuple<int, int, int, int, Tuple<int>>, donc le type de données obtenu par testTuple8.Rest est Tuple<int>, donc pour obtenir la valeur exacte, il faut prendre la propriété Item1.
2. Représente un ensemble de données Créez un tuple ci-dessous pour représenter trois informations sur un élève : nom, âge et taille, sans créer de classe supplémentaire séparément.
3. Retourner plusieurs valeurs d’une méthode Lorsqu’une fonction doit retourner plusieurs valeurs, le paramètre out peut généralement être utilisé, et les tuples peuvent être utilisés à la place de out pour retourner plusieurs valeurs.
4. Transfert multi-valeurs pour les méthodes à paramètre unique
Lorsque le paramètre de fonction n’est qu’un seul type d’objet, plusieurs valeurs de paramètre peuvent être transmises via l’implémentation du tuple.
Malgré les méthodes pratiques mentionnées ci-dessus, les tuples présentent également des défauts importants :
- Lors de l’accès aux éléments, vous ne pouvez y accéder que via ItemX, et il faut clarifier l’ordre des éléments avant utilisation, et les noms des attributs n’ont aucune signification pratique, ce qui est difficile à retenir.
- Il y a jusqu’à huit éléments, et si vous en voulez plus, vous ne pouvez étendre qu’en imbriquant avec le dernier élément ;
- La tuple est un type de référence, pas un type de valeur comme d’autres types simples, qui alloue de l’espace sur le tas et peut demander trop de travail de création et d’allocation lorsqu’il est très exigeant pour le CPU.
Par conséquent, un nouveau type ValueTuple a été introduit dans C# 7.0, détaillé dans les sections suivantes.
ValueTuple explique en détail
ValueTuple est l’une des nouvelles fonctionnalités de C# 7.0, disponible pour .Net Framework 4.7 et versions ultérieures.
ValueTuple ne nécessite pas 4,7, tant que Nuget est correct, 4,7 est intégré. De plus, ValueTuple est un type de structure, Microsoft recommande de ne pas utiliser de structures de plus de 64 octets, ce qui est également efficace pour ValueTuple.
Un tuple de valeur est aussi une structure de données utilisée pour représenter un nombre et une séquence spécifiques d’éléments, mais il diffère d’une classe de tuples, avec les principales différences suivantes :
Un uplet de valeur est une structure, un type de valeur, et non une classe, tandis qu’un uplet est une classe, un type de référence ; Les éléments de la tuple de valeur sont variables, pas en lecture seule, c’est-à-dire qu’ils peuvent modifier la valeur de l’élément dans le tuple de valeur ; Un tuple de valeurs de membres de données est un champ, pas un attribut. L’utilisation spécifique des tuples de valeur est la suivante :
1. Comment créer un tuple de valeur Comme les classes de tuples, les tuples de valeur du .Net Framework ne prennent en charge que 1 à 7 éléments de tuple, et s’il y a 8 éléments ou plus, il faut utiliser les propriétés imbriquées et Rest du tuple de valeur pour l’implémenter. De plus, la classe ValueTuple peut fournir des méthodes statiques pour créer des objets de tuple de valeur.
Créez des tuples à l’aide de constructeurs :
Construisons des tuples en utilisant la méthode statique des tuples, supportant jusqu’à huit éléments :
Notez que le type de Tuple construit ici est en réalité Tuple<int, int, <int>>, donc le type de données obtenu par testTuple8.Rest est Tuple<int>, donc pour obtenir la valeur exacte, il faut prendre la propriété Item1.
Différence d’optimisation :Lorsqu’un uplet de valeurs de plus de 7 éléments est construit, les valeurs du tuple imbriqué peuvent être accessibles en utilisant l’ItemX suivant, et pour l’exemple ci-dessus, pour accéder au dixième élément, soit via testTuple10.Rest.Item3 ou testTuple10.Item10.
2. Représente un ensemble de données Créez un tuple de valeurs représentant trois informations sur un élève : nom, âge et taille, sans créer une classe supplémentaire séparément.
3. Retourner plusieurs valeurs d’une méthode Les tuples de valeurs peuvent également retourner plusieurs valeurs à la place du paramètre out dans la définition de la fonction.
Différence d’optimisation :La valeur de retour peut être spécifiée dans le ValueTuple de manière inexplicable, en utilisant une nouvelle syntaxe (,,) à la place, telle que (string, int, uint) :
Le débogage du type d’étudiantInfo est le triplet ValueType.
Différence d’optimisation :La valeur de retour peut spécifier le nom de l’élément afin de faciliter la compréhension de l’attribution et de l’accès à la mémoire :
Attribution pratique de la mémoire :
4. Transfert multi-valeurs pour les méthodes à paramètre unique Lorsqu’un paramètre de fonction n’est qu’un seul type d’objet, plusieurs valeurs peuvent être transmises en utilisant l’implémentation du tuple de valeurs.
5. Déconstruire le ValueTuple Vous pouvez utiliser var (x, y) ou (var x, var y) pour résoudre les éléments du tuple afin de construire des variables locales, tout en utilisant le symbole « _ » pour ignorer les éléments indésirables.
Comme mentionné plus haut, ValueTuple rend C# plus simple et plus facile à utiliser. Les principaux avantages par rapport aux Tuples sont les suivants :
- ValueTuple prend en charge une nouvelle syntaxe pour les valeurs de retour de fonction (,,)", simplifiant le code ;
- Il convient de noter ici que, bien qu’il soit nommé, la valeur tuple ne définit en réalité pas l’attribut ou le champ d’un tel nom, le vrai nom reste ItemX, et tous les noms d’éléments ne sont utilisés que lors de la conception et de la compilation, pas à l’exécution (il faut donc prêter attention aux opérations de sérialisation et de désérialisation de ce type) ;
- Certains ou tous les tuplets d’éléments peuvent être utilisés plus facilement en utilisant des méthodes de destruction ;
- Les uplets de valeur sont des types de valeurs, qui sont plus efficaces à utiliser que les tuples de types de référence, et les uplets de valeur disposent d’une méthode de comparaison permettant de comparer s’ils sont égaux, voir Détails :https://msdn.microsoft.com/en-us/library/system.valuetuple
|