English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tuple C#

C# orienté objet (OOP)4La classe Tuple<T> a été introduite dans le .NET Framework

.0 introduite. Un tuple est une structure de données qui contient une séquence d'éléments de différents types. Il peut être utilisé dans des situations où il est nécessaire de sauvegarder des objets ayant des attributs dans une structure de données, mais où il n'est pas souhaitable de créer un type séparé pour eux.

Syntaxe :1Tuple<T2Tuple<T3Tuple<T4Tuple<T5Tuple<T6Tuple<T7, T

, TRest>

Tuple<int, string, string> person = new Tuple<int, string, string>(1, "Steve", "Jobs");

Dans l'exemple ci-dessus, nous avons créé un Tuple contenant une instance d'enregistrement d'une personne. Nous avons attribué un type à chaque élément et avons passé les valeurs au constructeur. Il est fastidieux de spécifier le type de chaque élément. C# a introduit une classe d'aide statique Tuple, qui retourne des instances de Tuple <T> sans avoir à spécifier le type de chaque élément, comme suit.

var person = Tuple.Create(1, "Steve", "Jobs");

Un tuple ne peut contenir au plus huit éléments. Lorsque vous essayez d'inclure plus de huit éléments, il会产生编译器错误。

var numbers = Tuple.Create(1, 2, 3, 4, 5, 6, 7, 8);

Accéder aux éléments d'un tuple

Les éléments du tuple peuvent être accédés via l'attribut Item < elementnumber >, par exemple Item1et Item2et Item3etc., on peut accéder à Item7l'attribut. Item1l'attribut retourne l'élément premier, Item2Retourne le deuxième élément, et ainsi de suite. Le dernier élément (le8un élément) utilisera l'attribut Rest pour le retourner.

var person = Tuple.Create(1, "Steve", "Jobs");
person.Item1; // Retour 1
person.Item2; // retourne "Steve"
person.Item3; // retourne "Jobs"
var nombres = Tuple.Create("Un", 2, 3, "Quatre", 5, "Six" 7, 8);
numbers.Item1; // Retour "Un"
numbers.Item2; // Retour 2
numbers.Item3; // Retour 3
numbers.Item4; // Retour "Quatre"
numbers.Item5; // Retour 5
numbers.Item6; // Retour "Six"
numbers.Item7; // Retour 7
numbers.Rest; // Retour (8)
numbers.Rest.Item1; // Retour 8

Généralement, le8une position pour les tuples imbriqués, vous pouvez utiliser la propriété Rest pour accéder à cette position.

Tuples imbriqués

Si vous souhaitez inclure huit éléments ou plus dans un tuple, vous pouvez le faire en imbriquant un autre objet de tuple en tant que huitième élément. Vous pouvez accéder au dernier tuple imbriqué via la propriété Rest. Pour accéder aux éléments du tuple imbriqué, utilisez Rest.Item1.Item<elelementNumber> attribut.

var numbers = Tuple.Create(1, 2, 3, 4, 5, 6, 7, Tuple.Create(8, 9, 10, 11, 12, 13));
numbers.Item1; // Retour 1
numbers.Item7; // Retour 7
numbers.Rest.Item1; //Retour (8,9,10,11,12,13)
numbers.Rest.Item1.Item1; //Retour 8
numbers.Rest.Item1.Item2; //Retour 9

Vous pouvez inclure des objets de tuples imbriqués à n'importe quel endroit de la séquence. Cependant, il est recommandé de placer les tuples imbriqués à la fin de la séquence pour pouvoir accéder à la propriété Rest.

var numbers = Tuple.Create(1, 2, Tuple.Create(3, 4, 5, 6, 7,  8), 9, 10, 11, 12, 13 );
numbers.Item1; // Retour 1
numbers.Item2; // Retour 2
numbers.Item3; // Retour (3, 4, 5, 6, 7,  8)
numbers.Item3.Item1; // Retour 3
numbers.Item4; // Retour 9
numbers.Rest.Item1; //Retour13

Le tuple en tant que paramètre de méthode

Les méthodes peuvent passer des tuples en tant que paramètres.

static void Main(string[] args)
{
	var person = Tuple.Create(
}1, "Steve", "Jobs");
    DisplayTuple(person);
}
static void DisplayTuple(Tuple<int,string,string> person)
{
    Console.WriteLine($"Id = { person.Item1});
    Console.WriteLine($"Prénom = { person.Item2});
    Console.WriteLine($"Nom de famille = { person.Item3});
}

Le tuple en tant que type de retour

Les tuples peuvent être retournés par une méthode.

static void Main(string[] args)
{
	var person = GetPerson();
}
}
static Tuple<int, string, string> GetPerson() 
{
	return Tuple.Create(
}1, "Bill", "Gates");
}

Utilisation des tuples

Les tuples peuvent être utilisés dans les cas suivants :

  1. Lorsque vous souhaitez retourner plusieurs valeurs d'une méthode sans utiliser les paramètres ref ou out...

  2. Lorsque vous souhaitez transmettre plusieurs valeurs à une méthode via un seul paramètre...

  3. Lorsque vous souhaitez sauvegarder temporairement des enregistrements de base de données ou certaines valeurs sans créer de classe distincte...

DÉSAVOIR DU TUPLE :

  1. Tuple est un type de référence et non un type de valeur. Il est alloué sur la pile et peut entraîner des opérations CPU intensives.

  2. Tuple est limité à huit éléments. Si vous avez besoin de stocker plus d'éléments, vous devez utiliser des tuples imbriqués. Cependant, cela peut entraîner des ambiguïtés.

  3. Il est déconseillé d'accéder aux éléments de Tuple via le schéma de nom Item <elementNumber> des propriétés, ce qui n'est pas très logique.

C#7ValueTuple a été introduit pour surmonter les limites de Tuple et faciliter son utilisation. Apprenez-en davantage à ce sujet au prochain chapitre.