400 votes

Comment initialiser facilement une liste de tuples?

J'aime les tuples. Ils vous permettent de regrouper rapidement les informations pertinentes, sans avoir à écrire une struct ou class. Ceci est très utile lors de refactoring très localisée code.

L'initialisation d'une liste d'entre eux semble toutefois un peu redondant.

var tupleList = new List<Tuple<int, string>>
{
    Tuple.Create( 1, "cow" ),
    Tuple.Create( 5, "chickens" ),
    Tuple.Create( 1, "airplane" )
};

N'est-il pas une meilleure façon? J'aimerais une solution le long des lignes du Dictionnaire de l'initialiseur.

Dictionary<int, string> students = new Dictionary<int, string>()
{
    { 111, "bleh" },
    { 112, "bloeh" },
    { 113, "blah" }
};

Ne peut-on pas utiliser une syntaxe similaire?

237voto

Steven Jeuris Points 4850

Oui! Ceci est possible.

Le { } la syntaxe de la collection de l'initialiseur fonctionne sur n'importe quel IEnumerable le type qui a un Ajout de la méthode avec le bon nombre d'arguments. Sans se soucier comment cela fonctionne sous les couvertures, cela signifie que vous pouvez simplement étendre à partir de la Liste<T>, ajouter un complément personnalisé méthode pour initialiser votre T, et vous avez terminé!

public class TupleList<T1, T2> : List<Tuple<T1, T2>>
{
    public void Add( T1 item, T2 item2 )
    {
        Add( new Tuple<T1, T2>( item, item2 ) );
    }
}

Cela vous permet d'effectuer les opérations suivantes:

var groceryList = new TupleList<int, string>
{
    { 1, "kiwi" },
    { 5, "apples" },
    { 3, "potatoes" },
    { 1, "tomato" }
};

47voto

Kevin Holditch Points 2276

Vous pouvez le faire en appelant chaque fois le constructeur avec est légèrement meilleur

 var tupleList = new List<Tuple<int, string>>
{
    new Tuple<int, string>(1, "cow" ),
    new Tuple<int, string>( 5, "chickens" ),
    new Tuple<int, string>( 1, "airplane" )
};
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X