2010-03-16 6 views
2

J'ai une fonction qui renvoie la valeur immédiatement supérieure d'une liste de clés de dictionnaire par rapport à une valeur donnée. Si nous avons une Key-List de {1, 4, 10, 24} et une valeur donnée de 8, la fonction retournera 10.Dictionnaire en tant que paramètre, où le type de valeur n'est pas pertinent

De toute évidence, le type de la partie Valeur du dictionnaire n'a pas d'importance pour la fonction, la fonction de code pour un

Dictionary<int, int> 

et

Dictionary<int, myClass> 

serait le même.

A quoi doit ressembler la tête de méthode, quand je veux appeler la fonction avec n'importe quel dictionnaire, qui a int comme type de clé et le type de valeur est non pertinent?

J'ai essayé:

private int GetClosedKey(Dictionary<int, object> list, int theValue); 

mais il dit qu'il ya des arguments illégaux, quand je l'appelle avec un dictionnaire. Je ne veux pas copier et coller la fonction pour chaque type de valeur différent que ma fonction peut être appelée. Toute idée, comment accomplir cela?

Merci à l'avance, Frank

Répondre

11

Vous pouvez le faire générique:

private int GetClosedKey<T>(Dictionary<int, T> list, int theValue) 

Dans la plupart des cas, lorsque vous appelez la méthode que vous pouvez utiliser l'inférence de type pour éviter d'avoir à spécifier l'argument de type pour T.

Cependant, je envisager changer à:

private int GetClosedKey(ICollection<int> list, int theValue) 

Et puis appeler avec:

int value = GetClosedKey(dictionary.Keys, desiredValue); 

Cela rend le code plus général - il n'y a pas besoin de le coupler étroitement avec un dictionnaire, après tout. En dehors de toute autre chose, cela va simplifier le test.

+0

@Nick: Je ne pense pas; le qusetion n'est pas particulièrement clair, mais je pense qu'il va en fait retourner une clé, pas une valeur. –

+0

J'ai défilé devant la première phrase complète de la question ... heh fait une différence. –

+0

Mon interprétation de ce qu'il dit indique que c'est bon pour lui – Adkins

Questions connexes