3

Le titre l'indique surtout. Je souhaite ajouter une méthode d'extension simple à la classe Dictionary en C#. Au début, j'allais le nommer Pop (TKey key), un peu comme la méthode Stack, mais il accepte une clé à utiliser pour la recherche.Terme pour "trouver, supprimer et renvoyer un élément" dans un ensemble?

Ensuite, j'allais faire Take (touche TKey), mais ça coïncide avec la méthode LINQ du même nom ... et bien que C# 3.0 vous le permette, je ne l'aime pas. Alors, que pensez-vous, il suffit de coller avec Pop ou est-il un meilleur terme pour "trouver et supprimer un élément"?

(je me sens un peu gêné de poser cette question, il semble que cette mince affaire ... mais je voudrais utiliser les normes et je n'ai pas une grande expérience avec beaucoup de langues/environnements.)

EDIT: Désolé, aurait dû expliquer plus .... Dans ce cas, je ne peux pas utiliser le terme Supprimer, car il est déjà défini par la classe que je suis en train d'étendre avec une nouvelle méthode.

EDIT 2: D'accord, voici ce que je suis à ce jour, inspiré par la sagesse de la foule comme il était:

public static TValue Extract<TKey, TValue> 
(
    this Dictionary<TKey, TValue> dict, 
    TKey key 
) 
{ 
    TValue value = dict[key]; 
    dict.Remove(key); 
    return value; 
} 

public static bool TryExtract<TKey, TValue> 
(
    this Dictionary<TKey, TValue> dict, 
    TKey key, 
    out TValue value 
) 
{ 
    if(!dict.TryGetValue(key, out value)) 
    { 
     return false; 
    } 
    dict.Remove(key); 
    return true; 
} 
+1

Rien de trivial à propos de la question. Bien mieux de choisir un bon nom en avance puis de vivre avec lui pendant des années (ou pire, faire vivre à quelqu'un d'autre) –

Répondre

8

Je pense Extrait, comme quand les archéologues Trouver une momie dans le sol, Retirez- puis Retour à un musée :)

+0

Vous, monsieur, avez fait un fort argument _very_. J'aime l'analogie. En outre, c'est ce que les militaires appellent quand ils vont extraire leurs troupes. –

+0

J'aime les analogies, ils rendent les choses tellement plus simples ... – Mark

+0

ouais, extrait est mieux que RemoveElement –

1

quoi que ce soit dans un mauvais particulier avec le Remove(key) method already provided?

attendre oh, vous voulez retourner l'élément enlevé aussi? Que diriez-vous

object valueRemoved = someDictionary.RemoveElement(key) 

facilement mis en œuvre comme

if (!dict.ContainsKey(key)) 
{ 
    return null; 
} 
object val = dict[key]; 
dict.Remove(key); 
return val; 
+0

Eh bien, ça ne retourne pas l'élément donc c'est toujours 2 lignes de code (pour récupérer d'abord puis supprimer) et c'est quelque chose que je suis susceptible de faire des milliers de fois à travers les projets, donc j'ai pensé que ce n'est pas une mauvaise idée pour une méthode d'extension standard. –

+0

Aussi, désolé si j'ai changé le titre avant de répondre, il a déjà dit "trouver et supprimer", pas "trouver, supprimer et retourner". –

+0

RemoveElement, cool. Cela pourrait fonctionner, bien que je puisse l'ignorer si un nom plus court arrive! Je vais y réfléchir pendant que je me remets au travail pour voir ce qui se passe ailleurs. –

1

Ma première hypothèse aurait été « prendre », mais comme vous l'avez dit, ce qui est déjà pris. Mes suggestions suivantes seraient "Extraire" ou "Détacher", mais elles peuvent être ambiguës.

Que diriez-vous de "Retirer" ou "PullOut"?

+0

En fait, peut-être que je vais utiliser TakeItem , ajoutant Item après la méthode que je veux vraiment utiliser comme Steven A. Lowe suggéré ci-dessus. Donc, c'est la moitié du mérite pour vous deux si je l'utilise :) Je vais juste bosse vos réponses au lieu de marquer quelqu'un comme «le répondeur» pour cette question. –

+0

ok, vous êtes le gars d'origine Extrait et je tiens à donner du crédit où il est dû. Mais l'analogie de Mark m'a vraiment aidé. Peu importe, tout le monde reçoit un point de moi :) –

1

Cette action rappelle un peu une vieille collaboration plate-forme (principalement académique) appelé Linda. Dans cet environnement, ce dont vous parlez s'appellerait "in". Mais c'est un nom terrible - ils ont essentiellement les noms en arrière parce qu'ils les ont nommés du point de vue de l'espace de tuple partagé. Alors peu importe.

L'extrait est bon, et "Pop" est également assez évident (à peu près n'importe qui sait ce que vous faisiez, même si ce n'est pas une pile).

+0

Excellent. Je suis toujours heureux de recevoir des informations de la part de quelqu'un qui a probablement suivi une formation formelle dans ces domaines, car je suis complètement autodidacte. Je pense que je vais rester avec Extract pour le moment, car il a aussi une méthode apparentée TryExtract booléenne (touche TKey, valeur TValue) et TryPop me semble bizarre :) –