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

ValueTuple C#

C#7.0 (.NET Framework 4.7) a introduit la structure ValueTuple, qui est une représentation de type valeur de tuple.

ValueTuple n'est disponible que dans le .NET Framework 4.7disponible. Si vous ne voyez pas ValueTuple dans votre projet, vous devez l'installer. (.NET Framework 4.7ou une version supérieure, ou la bibliothèque .NET Standard 2.0 ou une version supérieure contient déjà ValueTuple。)

Pour installer le package ValueTuple, cliquez avec le bouton droit sur le projet dans l'Explorateur de solutions et sélectionnezGérer les packages NuGet... Cela ouvrira le gestionnaire de packages NuGet. Cliquez surParcourirOnglet, recherchez ValueTuple dans la zone de recherche et sélectionnezSystem.ValueTuplePaquet, comme suit.

Initialisation de ValueTuple

Il est facile de créer et d'initialiser ValueTuple. Vous pouvez utiliser des parenthèses () et spécifier les valeurs à l'intérieur pour le créer et l'initialiser.

var person = (1, "Bill", "Gates");    
//Tuple équivalent
//var person = Tuple.Create(1,“ Bill”,“ Gates”);"Bill", "Gates");

Il est également possible d'initialiser ValueTuple en spécifiant les types de chaque élément, comme ci-dessous.

ValueTuple<int, string, string> person = (1, "Bill", "Gates");
person.Item1;  // retourne1
person.Item2;   // retourne "Bill"
person.Item3;   // retourne "Gates"

Voici une méthode abrégée pour déclarer le type de chaque membre.

(int, string, string) person = (1, "Bill", "Gates");
person.Item1;  // retourne1
person.Item2;   // retourne "Bill"
person.Item3;   // retourne "Gates"

Veuillez noter que nous n'avons pas utilisé var dans l'expression d'initialisation de tuple ci-dessus, mais nous avons fourni le type de chaque membre entre les crochets.

Un tuple doit au moins contenir deux valeurs. Le suivant n'est pas un tuple :

var number = (1);  // de type int, pas de tuple
var numbers = (1,2); // Tuple valide

Contrairement aux Tuple, ValueTuple peut contenir huit valeurs ou plus.

var numbers = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14);

nommer les membres

Nous pouvons attribuer des noms aux propriétés ValueTuple, au lieu d'utiliser les noms de propriétés par défaut, par exemple Item1,Item2etc.

(int Id, string FirstName, string LastName) person = (1, "Bill", "Gates");
person.Id;   // retourne1
person.FirstName;  // retourne "Bill"
person.LastName; // retourne "Gates"

Nous pouvons également attribuer des valeurs aux noms des membres à droite, comme ci-dessous.

var person = (Id:1, FirstName: "Bill", LastName: "Gates");

Veuillez noter que nous pouvons fournir le nom des membres à gauche ou à droite, mais nous ne pouvons pas fournir le nom des membres aux deux côtés. La gauche a la priorité sur la droite. Le contenu suivant ignore le nom à droite.

// PersonId, FName, LName seront ignorés.}}
(int Id, string FirstName, string LastName) person = (PersonId:1, FName: "Bill", LName: "Gates");
//PersonId, FirstName, LastName seront ignorés. Il aura des noms par défaut : Item1,Item2,Item3。
(string, string, int) person = (PersonId:1, FName: "Bill", LName: "Gates");

Nous pouvons également assigner des valeurs aux membres des variables.

string firstName = "Bill", lastName = "Gates";
var per = (FirstName: firstName, LastName: lastName);

ValueTuple en tant que type de retour

Les méthodes suivantes renvoient un ValueTuple.

static void Main(string[] args)
{
    DisplayTuple(1, "Bill", "Gates");
}
static void DisplayTuple((int, string, string) person)
{
    Console.WriteLine($"Id = { person.Item1});
    Console.WriteLine($"Prénom = { person.Item2});
    Console.WriteLine($"Nom de famille = { person.Item3});
}

Nous pouvons également attribuer des noms différents aux membres du ValueTuple renvoyé par une méthode.

static void Main(string[] args)
{    var person = GetPerson();
}
static (int, string, string) GetPerson()}} 
{    return (Id:1, FirstName: "Bill", LastName: "Gates");
}

Destructuration

Il est possible de récupérer les différents membres d'un ValueTuple en utilisant la déstructuration. La syntaxe de déstructuration sépare le ValueTuple en plusieurs parties et affecte chaque partie à de nouvelles variables.

static void Main(string[] args)
{  
    // Modification du nom des attributs
    (int PersonId, string FName, string LName) = GetPerson();
}
static (int, string, string) GetPerson()}} 
{    return (Id:1, FirstName: "Bill", LastName: "Gates");
}

Nous pouvons également utiliser var au lieu du nom explicite du type de données.

static void Main(string[] args)
{    
    // Utilisation de var comme type de données
    (var PersonId, var FName, var LName) person = GetPerson();
}
static (int, string, string) GetPerson()}} 
{ 
   return (Id:1, FirstName: "Bill", LastName: "Gates");
}

ValueTuple permet également de déstructurer des membres non utilisés en 'discard'.

// Utilisez le tiret bas _ pour jeter le membre non utilisé LName
(var id, var FName, _) = GetPerson();