2017-05-29 1 views
-7

Est-il possible de créer une liste de ValueTuple en C# 7?Comment créer une liste de ValueTuple?

comme ceci:

List<(int example, string descrpt)> Method() 
{ 
    return Something; 
} 
+18

Pourquoi ne pas essayer? –

+3

Je suis presque tenté de downvote puisque c'est la syntaxe requise pour renvoyer une liste de tuples nommés. Pourquoi cette question? –

+0

Je suppose que la question ne portait pas sur le type de retour de la méthode, mais plutôt sur le "Quelque chose" manquant **. – quetzalcoatl

Répondre

18

Vous recherchez une syntaxe comme ceci:

List<(int, string)> list = new List<(int, string)>(); 
list.Add((3, "test")); 
list.Add((6, "second")); 

Vous pouvez utiliser comme ça dans votre cas:

List<(int, string)> Method() => 
    new List<(int, string)> 
    { 
     (3, "test"), 
     (6, "second") 
    }; 

Vous pouvez également nommer les valeurs avant de retourner:

List<(int Foo, string Bar)> Method() => 
    ... 

Et vous pouvez recevoir les valeurs en (re) en les nommant:

List<(int MyInteger, string MyString)> result = Method(); 
var firstTuple = result.First(); 
int i = firstTuple.MyInteger; 
string s = firstTuple.MyString; 
+0

thx Guilherme, répondre à ma question – ArthNRick

+0

C'est mieux pour nommer les champs dans la définition de la méthode. –

-2

Cette syntaxe est mieux appliquée à c# 6 mais peut être utilisé dans c# 7 aussi bien. D'autres réponses sont beaucoup plus correctes car les ont tendance à utiliser ValueTuple au lieu de Tuple utilisé ici. Vous pouvez voir les différences here pour ValueTuple

List<Tuple<int, string>> Method() 
{ 
    return new List<Tuple<int, string>> 
    { 
     new Tuple<int, string>(2, "abc"), 
     new Tuple<int, string>(2, "abce"), 
     new Tuple<int, string>(2, "abcd"), 
    }; 
} 
+1

Pas besoin d'utiliser "Tuple" du tout –

+0

Je préfère sûrement ce sintax, est plus lisible et clair que les autres. – Gusman

+1

Je ne sais pas pourquoi il y a eu des votes négatifs, ce n'est pas une mauvaise réponse quand même ... –

4

Bien sûr, vous pouvez le faire:

List<(int example, string descrpt)> Method() => new List<int, string> { (2, "x") }; 

var data = Method(); 
Console.WriteLine(data.First().example); 
Console.WriteLine(data.First().descrpt);