11
votes

Utilisation des paires de la valeur de clé comme paramètres

simple. Si j'utilise: xxx pré>

puis je peux l'utiliser comme: p> xxx pré>

mais maintenant je traite avec des paires de la valeur clé! J'ai une classe KeyValue pour relier un entier à une valeur de chaîne. Donc je commence par: p> xxx pré>

mais je ne peux pas utiliser ceci: p> xxx pré>

à la place, je suis obligé de UTILISATION: P>

Add(new KeyValue(1, "A"), new KeyValue(2, "B"), new KeyValue(3, "C"), new KeyValue(4, "D"));


2 commentaires

Vous savez qu'il y a déjà un keyvaluepair ?


Ouais je sais. :-) C'est le type que j'utilise ...


3 Réponses :


23
votes

Si vous avez accepté un identificateur code>, vous pouvez probablement utiliser (en C # 3.0, au moins):

static void Add(IDictionary<int, string> data) {
    foreach (var pair in data) {
        Console.WriteLine(pair.Key + " = " + pair.Value);
    }
}


1 commentaires

Vous pouvez également utiliser le type d'aliasing de type si vous ne voulez pas taper tout type de type dictionnaire générique à l'aide de paires = System.Collections.generic.dictionary ; puis utilisez comme Ajouter (Nouvelles paires {{1, "A"}, {2, "B"}, {3, "C"}, {4, "D"}}); Légèrement Natre.



0
votes

Vous pouvez utiliser quelque chose comme ce qui suit avec l'inconvénient évident que vous perdez de la dactylographie forte.

 public void Add(params Object[] inputs)
 {
     Int32 numberPairs = inputs.Length / 2;

     KeyValue[] keyValues = new KeyValue[numberPairs];

     for (Int32 i = 0; i < numberPairs; i++)
     {
         Int32 key = (Int32)inputs[2 * i];
         String value = (String)inputs[2 * i + 1];

         keyvalues[i] = new KeyValue(key, value);
     }

     // Call the overloaded method accepting KeyValue[].
     this.Add(keyValues);
 }

 public void Add(params KeyValue[] values)
 {
     // Do work here.
 }


0 commentaires

3
votes

Vous pouvez modifier votre conception de classe actuelle, mais vous devrez ajouter des génériques et utiliser l'interface iEnumerable. XXX PRE>

Après ces ajouts, vous pouvez effectuer ce qui suit: P>

    new KeyValueList<int, string>() { { 1, "A" }, { 2, "B" } };


2 commentaires

Héritage de Liste > et ajout de la personnalisation Ajouter serait la voie la plus facile ici.


@MARC: Bonne idée. Je n'y ai pas pensé.