Maison > développement back-end > C++ > ValueTuple vs Tuple en C# : quelles sont les principales différences et quand devriez-vous les utiliser ?

ValueTuple vs Tuple en C# : quelles sont les principales différences et quand devriez-vous les utiliser ?

Susan Sarandon
Libérer: 2024-12-30 14:58:10
original
704 Les gens l'ont consulté

ValueTuple vs. Tuple in C#: What are the Key Differences and When Should You Use Each?

System.ValueTuple vs System.Tuple

Quelle est la différence ?

Système. ValueTuple et System.Tuple sont deux types qui peuvent être utilisés pour représenter des tuples en C#. Cependant, il existe plusieurs différences clés entre eux.

Différences clés

Feature ValueTuple Tuple
Value type Yes No
Mutability Mutable Immutable
Item access Fields Properties
Syntax sugar Supports deconstruction and named arguments Does not
Performance Allocation-free on the stack Requires heap allocation

ValueTuple

ValueTuple est une valeur type (struct), ce qui signifie qu'il est alloué sur la pile et ne nécessite pas de garbage collection. Il s'agit d'une structure mutable, ses valeurs peuvent donc être modifiées après sa création. ValueTuple expose ses éléments via des champs au lieu de propriétés.

Tuple

Tuple est un type de référence (classe), ce qui signifie qu'il est alloué sur le tas et nécessite un garbage collection . C'est une classe immuable, ses valeurs ne peuvent donc pas être modifiées après sa création. Tuple expose ses éléments via des propriétés.

Pourquoi utiliser ValueTuple ?

L'utilisation de ValueTuple présente plusieurs avantages par rapport à l'utilisation de Tuple :

  • Évite les pénalités d'allocation en raison du fait qu'il s'agit d'un type valeur
  • Fournit une égalité superficielle automatique sémantique
  • Prend en charge la déconstruction et les arguments nommés, ce qui rend le travail avec des tuples plus pratique et moins ambigu
  • Mise en œuvre optimisée de l'égalité pour de meilleures performances

Exemple

Utilisation de ValueTuple syntaxe :

public (int sum, int count) DoStuff(IEnumerable<int> values)
{
    var result = (sum: 0, count: 0);
    foreach (var value in values) { result.sum += value; result.count++; }
    return result;
}
Copier après la connexion

Utiliser la déconstruction :

var (sum, count) = DoStuff(Enumerable.Range(0, 10));
Console.WriteLine($"Sum: {sum}, Count: {count}");
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal